Ok z tym…
$(window).scroll(function()
{
$('.slides_layover').removeClass('showing_layover');
$('#slides_effect').show();
});
Z tego, co rozumiem, mogę stwierdzić, kiedy ktoś przewija. Dlatego próbuję wymyślić, jak złapać, gdy ktoś się zatrzymał. Z powyższego przykładu widać, że usuwam klasę z zestawu elementów podczas przewijania. Jednak chcę ponownie włączyć tę klasę, gdy użytkownik przestanie przewijać.
Powodem tego jest to, że zamierzam mieć pokaz na postój podczas przewijania strony, aby nadać stronie specjalny efekt, nad którym próbuję pracować. Ale jedna klasa, którą próbuję usunąć podczas przewijania, jest sprzeczna z tym efektem, ponieważ jest to efekt przezroczystości w pewnym sensie.
Odpowiedzi:
Aktualizacja
Napisałem rozszerzenie, aby ulepszyć domyślną
on
obsługę zdarzeń w jQuery . Dołącza funkcję obsługi zdarzenia dla jednego lub większej liczby zdarzeń do wybranych elementów i wywołuje funkcję obsługi, jeśli zdarzenie nie zostało wyzwolone dla danego interwału. Jest to przydatne, jeśli chcesz wywołać wywołanie zwrotne dopiero po opóźnieniu, takim jak zdarzenie zmiany rozmiaru itp.Ważne jest, aby sprawdzić repozytorium github pod kątem aktualizacji!
https://github.com/yckart/jquery.unevent.js
Użyj go jak każdego innego programu obsługi
on
lubbind
-event, z wyjątkiem tego, że możesz przekazać dodatkowy parametr jako ostatni:http://yckart.github.com/jquery.unevent.js/
(to demo używa
resize
zamiastscroll
, ale kogo to obchodzi ?!)źródło
Korzystanie z jQuery throttle / debounce
jQuery debounce jest dobrym rozwiązaniem w przypadku takich problemów. jsFidlle
Drugim parametrem jest flaga „at_begin”. Tutaj pokazałem, jak wykonać kod zarówno na „początku przewijania”, jak i „zakończeniu przewijania”.
Korzystanie z Lodash
Jak zasugerował Barry P, jsFiddle , podkreślenie lub lodash również mają odbicie , każdy z nieco innym apis.
źródło
leading
itrailing
siebie, a następnie upewnij się, że nie ma zamieszania.Rob W zasugerował, żebym sprawdził inny post na stosie, który był zasadniczo podobny do mojego oryginalnego. W którym czytaniu znalazłem link do strony:
http://james.padolsey.com/javascript/special-scroll-events-for-jquery/
To faktycznie pomogło mi bardzo ładnie rozwiązać mój problem po drobnych poprawkach dla moich własnych potrzeb, ale w sumie pomogło mi to zrzucić z drogi wiele bzdur i zaoszczędziło mi około 4 godzin samodzielnego rozwiązania tego problemu.
Widząc, że ten post wydaje się mieć jakąś wartość, pomyślałem, że wrócę i przekażę kod znaleziony pierwotnie pod wymienionym linkiem, na wypadek gdyby autor zdecydował się kiedykolwiek pójść w innym kierunku ze stroną i ostatecznie usunął link.
źródło
Zgodziłem się z niektórymi komentarzami powyżej, że nasłuchiwanie limitu czasu nie było wystarczająco dokładne, ponieważ uruchomi się, gdy przestaniesz przesuwać pasek przewijania na wystarczająco długo, a nie gdy przestaniesz przewijać. Myślę, że lepszym rozwiązaniem jest nasłuchiwanie, jak użytkownik puszcza mysz (ruch myszką), gdy tylko zacznie przewijać:
a przykład jego działania można zobaczyć w tym JSFiddle
źródło
Możesz ustawić interwał, który będzie uruchamiany co około 500 ms, zgodnie z poniższymi wskazówkami:
Nie testowałem tego kodu, ale zasada powinna działać.
źródło
bardzo mała wersja z możliwością rozpoczęcia i zakończenia
źródło
Ok, to jest coś, czego używałem wcześniej. Zasadniczo wyglądasz na trzymającego się odniesienia do ostatniego
scrollTop()
. Po wyczyszczeniu limitu czasu sprawdzasz bieżącyscrollTop()
i jeśli są takie same, skończyłeś przewijanie.źródło
Styl ES6 ze sprawdzaniem rozpoczęcia przewijania również.
Stosowanie:
źródło
sprawdź zdarzenie scrollstop jquery mobile
źródło
Dla tych, którzy wciąż tego potrzebują, oto rozwiązanie
źródło
To powinno działać:
źródło
Oto, jak możesz sobie z tym poradzić:
źródło
Wykrywa zatrzymanie przewijania po 1 milisekundzie (lub zmień je) za pomocą globalnego zegara:
źródło