• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Animacja scrollowania svg path

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
383 wizyt
pytanie zadane 16 kwietnia 2023 w JavaScript przez AgentTecza Obywatel (1,810 p.)

Cześć!,

Uczę się javascripta i zrobiłem animację, która moim zdaniem jest fajna i ładna, lecz chciałbym dodać do niej jeszcze 2 rzeczy ale niestety nie wiem jak to zrobić.
Mianowicie pierwszą rzeczą jest to żeby pomiędzy tymi liniami był biały kolor a na zewnątrz był kolor czarny. Nie wiem czy muszę dodać do tego jakiś path po środku czy mogę jakoś ułożyć diva w taki sposób by był idealnie dopasowany.
Efekt który chciałbym uzyskać (na tym zdjęciu nie widać tych niebieskich lin tak dokładnie):

2 rzeczą którą nie wiem jak zrobić jest to by animacja była wykonywana dopiero wtedy gdy użytkownik widzi to, a nie wcześniej i gdy nie widzi również by stała na efekcie końcowym. Również chciałbym to lekko przyspieszyć bo nie da się przeskrolować do końca tak by animacja była zrobiona.
HTML:
 

 <section style="height: 150vh; background-color: black;">
            <div id="svg-container2">
              <svg viewBox="0 0 1440 320" style="transform: scaleX(-1)">
                <path id="my-path-2" class="path-2" d="M0,256L48,229.3C96,203,192,149,288,133.3C384,117,480,139,576,176C672,213,768,267,864,266.7C960,267,1056,213,1152,181.3C1248,149,1344,139,1392,133.3L1440,128" />
              </svg>
            </div>  
            <svg viewBox="0 0 1440 320">
              <path id="my-path" class="path-" d="M0,256L48,229.3C96,203,192,149,288,133.3C384,117,480,139,576,176C672,213,768,267,864,266.7C960,267,1056,213,1152,181.3C1248,149,1344,139,1392,133.3L1440,128" />
            </svg>
          </section>

CSS:
 

svg {
    width: 100%;
    height: 30%;
    z-index: -1;
}

path {
    stroke: #0099ff;
    stroke-width: 2;
    stroke-dasharray: 1000;
    stroke-dashoffset: 1000;
    fill: none;
}

JS:

const path1 = document.querySelector("#my-path");
const pathLength1 = path1.getTotalLength();
path1.style.strokeDasharray = pathLength1;
path1.style.strokeDashoffset = pathLength1;

const path2 = document.querySelector("#my-path-2");
const pathLength2 = path2.getTotalLength();
path2.style.strokeDasharray = pathLength2;
path2.style.strokeDashoffset = pathLength2;

window.addEventListener("scroll", () => {
    const scrollTop = window.pageYOffset;
    const scrollHeight = document.body.scrollHeight - window.innerHeight;
    const scrollFraction = scrollTop / scrollHeight;

    const drawLength1 = pathLength1 * scrollFraction;
    path1.style.strokeDashoffset = pathLength1 - drawLength1;

    let drawLength2 = pathLength2 * scrollFraction;
    let offset2 = pathLength2 - drawLength2;
    if (scrollFraction === 1) {
      offset2 = pathLength2 - 1;
    }
    path2.style.strokeDasharray = pathLength2;
    path2.style.strokeDashoffset = offset2;

    if (drawLength2 <= 0) {
      path2.style.strokeDasharray = pathLength2;
      path2.style.strokeDashoffset = pathLength2;
    }
});


Z góry dziękuje za pomoc <3!

komentarz 18 kwietnia 2023 przez VBService Ekspert (256,320 p.)
edycja 18 kwietnia 2023 przez VBService

Sprawdź, małe zmiany w Twoim kodzie, może będzie pomocne w dalszych "eksperymentach" z kodem. laugh

 

Sprawdź też w kwestii

jak zrobić jest to by animacja była wykonywana dopiero wtedy gdy użytkownik widzi

Intersection Observer API: [ 1 ] [ 2 ] [ 3 ]

 

komentarz 19 kwietnia 2023 przez AgentTecza Obywatel (1,810 p.)
Będę kombinował chociaż już próbowałem użyć Intersection Observer API,
ale dziękuje za podpowiedź i optymalizacje mojego kodu.
A czy masz jakąś podpowiedź jeśli chodzi o zrobienie białego koloru pomiędzy?
komentarz 19 kwietnia 2023 przez VBService Ekspert (256,320 p.)

Jak sam napisałeś

dodać do tego jakiś path po środku

też bym był za taką opcją.

<section style="height: 150vh;">
  <svg viewBox="0 0 1440 320" style="transform: scaleX(-1)">
    <path id="my-path-2" d="M0,256L48,229.3C96,203,192,149,288,133.3C384,117,480,139,576,176C672,213,768,267,864,266.7C960,267,1056,213,1152,181.3C1248,149,1344,139,1392,133.3L1440,128" />
  </svg>

  <!-- TU WSTAWIŁBYM KOD -->

  <svg viewBox="0 0 1440 320">
    <path id="my-path-1" d="M0,256L48,229.3C96,203,192,149,288,133.3C384,117,480,139,576,176C672,213,768,267,864,266.7C960,267,1056,213,1152,181.3C1248,149,1344,139,1392,133.3L1440,128" />
  </svg>
</section>

 

komentarz 19 kwietnia 2023 przez AgentTecza Obywatel (1,810 p.)
Tak wiem próbowałem to robić tylko nie za bardzo wiem jak idealnie wygenerować taki path po środku
komentarz 20 kwietnia 2023 przez VBService Ekspert (256,320 p.)

A sprawdź to: on-line.

Korzystałem z aplikacji: on-line.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 384 wizyt
pytanie zadane 6 lipca 2022 w JavaScript przez zerakot Obywatel (1,870 p.)
0 głosów
1 odpowiedź 452 wizyt
pytanie zadane 9 lipca 2015 w HTML i CSS przez LooRis Nowicjusz (230 p.)
0 głosów
1 odpowiedź 523 wizyt
pytanie zadane 15 czerwca 2017 w HTML i CSS przez Vorex444 Dyskutant (9,610 p.)

93,182 zapytań

142,196 odpowiedzi

322,002 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1889p. - dia-Chann
  2. 1864p. - Łukasz Piwowar
  3. 1847p. - CC PL
  4. 1843p. - Łukasz Eckert
  5. 1805p. - Tomasz Bielak
  6. 1785p. - Michal Drewniak
  7. 1777p. - Łukasz Siedlecki
  8. 1774p. - rucin93
  9. 1744p. - rafalszastok
  10. 1724p. - Adrian Wieprzkowicz
  11. 1684p. - Mikbac
  12. 1624p. - Anonim 3619784
  13. 1520p. - Marcin Putra
  14. 1368p. - ssynowiec
  15. 1258p. - Dawid128
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...