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

Animacja scrollowania svg path

Hosting forpsi easy 1 pln
0 głosów
150 wizyt
pytanie zadane 16 kwietnia 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 przez VBService Ekspert (246,070 p.)
edycja 18 kwietnia 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 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 przez VBService Ekspert (246,070 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 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 przez VBService Ekspert (246,070 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ź 178 wizyt
pytanie zadane 6 lipca 2022 w JavaScript przez zerakot Obywatel (1,870 p.)
0 głosów
1 odpowiedź 347 wizyt
pytanie zadane 9 lipca 2015 w HTML i CSS przez LooRis Nowicjusz (230 p.)
0 głosów
1 odpowiedź 486 wizyt
pytanie zadane 15 czerwca 2017 w HTML i CSS przez Vorex444 Dyskutant (9,610 p.)

92,125 zapytań

140,785 odpowiedzi

317,805 komentarzy

61,446 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 1468p. - Łukasz Eckert
  2. 1444p. - Dawid128
  3. 1430p. - CC PL
  4. 1419p. - rafalszastok
  5. 1418p. - Marcin Putra
  6. 1373p. - Mikbac
  7. 1362p. - rucin93
  8. 1351p. - sefirek
  9. 1325p. - Michal Drewniak
  10. 1296p. - Adrian Wieprzkowicz
  11. 1267p. - Eryk Andrzejewski
  12. 1260p. - TheLukaszNs
  13. 1239p. - JarekDev
  14. 1188p. - Rafał Trójniak
  15. 1179p. - 13NOONE37
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.

Uwaga - w dniach od 02.12 do 08.12 trwają Mikołajki (książki drukowane mają rabat -35%, ebooki do -45%). Zaś dodatkowy, specjalny kod zniżkowy: HELMIKOLAJ-10 dla naszych Widzów zapewni Wam oszczędność -10zł dla zamówień powyżej 70zł! Warto korzystać!

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...