Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] jQuery - określona akcja działa po przewinięciu strony
Forum PHP.pl > Forum > Przedszkole
bahh
Witam wszystkich,

borykam się z pewnym problemem, otóż - mam funkcję, która ma się wykonać po przewinięciu strony. To znaczy, jeśli scroll będzie na wysokości 500 pikseli od samej góry strony, to uruchomi to (ważne, uruchomi to TYLKO RAZ!)

  1. jQuery({someValue: 0}).animate({someValue: 20}, {
  2. duration: 2000,
  3. easing:'swing',
  4. step: function() {
  5. $('#c1').text(Math.ceil(this.someValue));
  6. }
  7. });


w jaki sposób to zrobić? Korzystałem z $(window).scrollTop() jako if (tzn var scroll1 = $(window).scrollTop() i dalej if (scroll1>500) ale za każdym razem, gdy przewinąłem stronę i wróciłem w górę to animacja odpalała się ponownie - czego rzecz jasna nie chcę. Ma ktoś pomysł, jak zrobić to tak, by dana akcja uruchomiła się tylko jeden raz po przewinięciu strony do danej wartości?
Turson
Zdefiniuj jakąś zmienną przykładowo
var animacja = true;
przed wykonaniem animacji sprawdz czy animacja == true, jesli tak to ją wykonaj i ustaw na false
bahh
Niestety nie działa, mój kod:

  1. $(document).ready(function(){
  2. var scrolled = $(window).scrollTop();
  3. var animation1 = true;
  4. if (scrolled>100)
  5. {
  6. if (animation1 == true)
  7. {
  8. jQuery({someValue: 0}).animate({someValue: 20}, {
  9. duration: 2000,
  10. easing:'swing',
  11. step: function() {
  12. $('#c1').text(Math.ceil(this.someValue));
  13. }
  14. });
  15. animation1 = false;
  16. }
  17. }
  18. });
viking
Scrolled jest tu pobierane raz po załadowaniu. Ty potrzebujesz przypiąć zdarzenie $(window).on('scroll') i w nim sprawdzać pozycję.
bahh
gdy zmieniam
var scrolled = $(window).scrollTop();
na
var scrolled = $(window).on('scroll');

to nic to nie daje, jak to poprawnie wykonać?
viking
  1. $(function() {
  2. $(window).on('scroll', function(){
  3. var scrolled = $(this).scrollTop();
  4. ...
  5. });
  6. });
  7.  
tzm
Cytat(viking @ 24.12.2014, 16:58:06 ) *
  1. $(function() {
  2. var oneTimeEvent = false;
  3. $(window).on('scroll', function(){
  4. var scrolled = $(this).scrollTop();
  5. If ( scrolled == 500 && oneTimeEvent == false){
  6. oneTimeEvent = true;
  7. //tutaj kod
  8. }
  9. ...
  10. });
  11. });
  12.  
bahh
niestety nie śmiga to, po prostu jQuery przestaje działać
Turson
Sprawdź konsolę
bahh
Panowie, nie znam się dobrze na jQuery smile.gif liczę na wyrozumiałość, zwłaszcza, że funkcje, które tutaj podajecie są dla mnie niezrozumiałe. Dodatkowo dla informacji wrzucam powyższy kod do $(document).ready(function(){ ... });

maviozo
Liczysz na gotowca, a nie wyrozumiałość smile.gif
Zacząłbym od edycji tej linijki:
Kod
If ( scrolled == 500 && oneTimeEvent == false){

Ponieważ przewijasz stronę partiami, zapewne przeskakujesz wartość 500. Ustaw na "większe lub równe " wtedy zarówno 500, jak i 510 i 520 uruchomi zdarzenie.
Kod
If ( scrolled >= 500 && oneTimeEvent == false){

Poza tym, jeśli nie masz pewności, czy funkcja działa, po
Kod
$(window).on('scroll', function(){
var scrolled = $(this).scrollTop();

Dodaj sobie np. console.log(scrolled) to będziesz wiedział, jak ta wartość się zmienia w zależności od pozycji strony.
tzm
Nie jestem pewien co zwraca scrollTop. Najwyżej dopisz parseInt().
bahh
scrollTop zwraca wartość numeryczną - pozycję od danego elementu. W naszym przypadku wysokość okna. Samo działanie funkcji mogę testować ale ta funkcja ma błąd już w strukturze. Błąd typu jak w PHP brak średnika itp. Nie mogę testować, bo po wklejeniu powyższego kodu cały jQuery nie działa. Nie wiem gdzie jest błąd w tamtejszej składni

http://jsfiddle.net/41wwyxsz/

nikt nie pomoże?
trueblue
.body a nie body?
If zamiast if?

Zmień == na >=
bahh
mam i rozwiązanie w pełni działające, jak ktoś potrzebuje niech korzysta:
  1. var animation1 = true;
  2.  
  3. $(window).scroll(function() {
  4. if ($(this).scrollTop() > 100) {
  5. if (animation1 == true)
  6. {
  7. //tutaj dajemy okreslone zadania po scrollu
  8. jQuery({someValue: 0}).animate({someValue: 20}, {
  9. duration: 2000,
  10. easing:'swing',
  11. step: function() {
  12. $('#c1').text(Math.ceil(this.someValue));
  13. }
  14. });
  15. //tutaj koniec dodawania zadan
  16. animation1 = false;
  17. }
  18. }
  19. });
com
http://jsfiddle.net/41wwyxsz/1/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.