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

Animacja przewijania w czystym JS z systemem start/stop

Object Storage Arubacloud
+1 głos
421 wizyt
pytanie zadane 8 września 2020 w JavaScript przez Grzegorz Mikina Dyskutant (8,060 p.)

Mam takie pytanie, mam strone której scrollMaxY wynosi 5680 i chcę żeby po dodaniu klasy pauza i odjęciu klasy play gdzie zmienia mi się backgroundImage zgodnie z nazwami, zostało uruchomione przewijanie, ale tak by po ponownym kliknięciu w przycisk zostało zatrzymane w miejscu w którym zostało to kliknięte później po ponownym uruchomieniu rusza od miejsca scrollY i jedzie dalej do tej pozycji to jest 5680 to koniec strony, sekcja kontakt.

Próbowałem już zastosować setInterval , setTimeout ale nie przynosi to zamierzonego efektu, działa to na zasadzie stepsów, chcę żeby było to płynne przejście. A nie przewinięcie na zasadzie skoku do punktu.
Jak się do tego zabrać? Proszę o jakąś podpowiedź.Myślałem jeszcze o keyframes aniomation-play-state? Czy sądzicie że ta opcja jest najlepszą z możliwych.

jQuery niedługo ma zniknąć z tego co słyszałem, nie wiem ile w tym prawdy, ale tak mówił znajomy i żeby z tego zrezygnować.

//Przełączanie tła w panelu kontrolnym animacji i pojawienie się strzałki do góry //przy osiągnięciu określonej pozycji scrollY od góry strony.

const player = document.getElementById("btn2");
const stopped = document.getElementById("btn3");
const play = document.querySelector(".play");
const pauza = document.querySelector(".pauza");
const stop = document.querySelector(".stop");
const ostop = document.querySelector(".ostop");
const bTT = document.querySelector("btn5")


btn2.addEventListener("click", function () {
  btn2.classList.toggle("pauza");
  btn2.classList.toggle("play");
  btn3.classList.toggle("email");
  // btn3.classList.toggle("ostop");
})

btn3.addEventListener("click", function () {
  if (btn3.classList == "email") {
    btn3.classList.remove("email");
    btn3.classList.add("oemail");
    window.scrollTo(0, document.body.scrollHeight);
  }
})

document.addEventListener("scroll", function () {
  // console.log(scrollY);
  // console.log(scrollMaxY);
  if (scrollY < 4000) {
    // console.log("jestem poniżej 4000")
    btn5.classList.add("cover");

  }
  if (scrollY > 4000) {
    // console.log("jestem ponad 4000")
    btn5.classList.remove("cover");
  }
})

window.addEventListener("scroll", function () {})
//Powrót do góry po kliknięciu w strzałeczkę z klasą która pojawia się przy określonej pozycji

function scrollToTop(duration) {
  // cancel if already on top
  
  if (document.scrollingElement.scrollTop === 0) return;

  const cosParameter = document.scrollingElement.scrollTop / 2;
  let scrollCount = 0,
    oldTimestamp = null;

  function step(newTimestamp) {
    if (oldTimestamp !== null) {
      // if duration is 0 scrollCount will be Infinity
      scrollCount += Math.PI * (newTimestamp - oldTimestamp) / duration;
      if (scrollCount >= Math.PI) return document.scrollingElement.scrollTop = 0;
      document.scrollingElement.scrollTop = cosParameter + cosParameter * Math.cos(scrollCount);
    }
    oldTimestamp = newTimestamp;
    window.requestAnimationFrame(step);
  }
  window.requestAnimationFrame(step);
}
 // Sekcja controll odpowiedzialna za sterowanie
<div id="controll clearfix">
        <div id="btn2" class="play" >
        </div>
        <div id="btn3" class="stop">
          <!-- <div id="btn3" class="email"> -->
        </div>
        <div id="btn5" onclick="scrollToTop(2000);" class="btn5 topArrow cover">
        </div>



 

komentarz 8 września 2020 przez senpai desu Mądrala (5,720 p.)
przeniesione 8 września 2020 przez ScriptyChris
jQuery  nie zniknie i zawsze będzie można go użyć, dużo mechanizmów zostało wbudowanych w przeglądarki i we frameworki frontendowe, dlatego pojawiło się przekonanie, że zaraz zniknie, jeśli robisz prostą stronę i nie masz zamiaru korzystać z frameworków śmiało korzystaj z jQuery

1 odpowiedź

0 głosów
odpowiedź 8 września 2020 przez VBService Ekspert (253,420 p.)
wybrane 9 września 2020 przez Grzegorz Mikina
 
Najlepsza

Smooth Scrolling - może da się do tego przykładu dodać przycisk start - stop.

 

komentarz 10 września 2020 przez VBService Ekspert (253,420 p.)

Na chwilę obecną, oficjalnie nie ma jeszcze takiej funkcjonalności: scroll-behavior, chyba że ktoś napisał "obejście", ale Ja takowego póki co nie znalazłem.

komentarz 10 września 2020 przez Grzegorz Mikina Dyskutant (8,060 p.)
scroll behavior to jakieś moje przeoczenie, ja to widzę tak, trzeba stworzyć funkcję czasu w trakcie trwania której będzie możliwe przewinięcie strony w jakimś czasie gdy to zatrzymuję, czas staje, strona staje. Ruszam, czas rusza, funkcja rusza i odmierza czas do końca. I zmierza do jakiegoś scrollMaxY, tak żeby nie było to ustawione na sztywno.
komentarz 10 września 2020 przez Grzegorz Mikina Dyskutant (8,060 p.)
Myśle że setTimeout będzie rozwiązaniem.
1
komentarz 10 września 2020 przez Grzegorz Mikina Dyskutant (8,060 p.)
Wrzucę kod Js gdy go już napiszę.
komentarz 10 września 2020 przez Grzegorz Mikina Dyskutant (8,060 p.)

Podobne pytania

+1 głos
2 odpowiedzi 136 wizyt
+1 głos
3 odpowiedzi 482 wizyt
pytanie zadane 23 września 2017 w HTML i CSS przez mola85 Początkujący (320 p.)
0 głosów
0 odpowiedzi 263 wizyt
pytanie zadane 9 kwietnia 2020 w JavaScript przez Whynotslave Początkujący (250 p.)

92,583 zapytań

141,434 odpowiedzi

319,668 komentarzy

61,966 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...