Czy można użyć metody Window.Onscroll, aby uwzględnić wykrywanie kierunku przewijania?Czy można użyć metody Window.Onscroll, aby uwzględnić wykrywanie kierunku przewijania?
14
A
Odpowiedz
21
Jeśli podczas przewijania strony i przewijania Y na stronie ładuje się i za każdym razem, gdy wystąpi zdarzenie przewijania, można porównać poprzednie wartości z nowymi wartościami, aby wiedzieć, który kierunek przewijał. Oto dowód pojęcia:
function scrollFunc(e) {
if (typeof scrollFunc.x == 'undefined') {
scrollFunc.x=window.pageXOffset;
scrollFunc.y=window.pageYOffset;
}
var diffX=scrollFunc.x-window.pageXOffset;
var diffY=scrollFunc.y-window.pageYOffset;
if(diffX<0) {
// Scroll right
} else if(diffX>0) {
// Scroll left
} else if(diffY<0) {
// Scroll down
} else if(diffY>0) {
// Scroll up
} else {
// First scroll event
}
scrollFunc.x=window.pageXOffset;
scrollFunc.y=window.pageYOffset;
}
window.onscroll=scrollFunc
0
miałem problemy podejmowania tej pracy w IE8 (choć jest on zgodny z IE9, FF i Chrome) - wszystkie zwoje wydają się być wykrywany jako poziomy.
Oto zmodyfikowany skrypt demo, który działa również w wersji ie8 i może obejmować kilka innych przeglądarek.
function scrollFunc(e) {
function getMethod() {
var x = 0, y = 0;
if (typeof(window.pageYOffset) == 'number') {
x = window.pageXOffset;
y = window.pageYOffset;
}
else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
x = document.body.scrollLeft;
y = document.body.scrollTop;
}
else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
}
return [x, y];
}
var xy = getMethod();
var xMethod = xy[0];
var yMethod = xy[1];
if (typeof scrollFunc.x == 'undefined') {
scrollFunc.x = xMethod;
scrollFunc.y = yMethod;
}
var diffX = scrollFunc.x - xMethod;
var diffY = scrollFunc.y - yMethod;
if(diffX<0) {
// Scroll right
} else if(diffX>0) {
// Scroll left
} else if(diffY<0) {
// Scroll down
} else if(diffY>0) {
// Scroll up
} else {
// First scroll event
}
scrollFunc.x = xMethod;
scrollFunc.y = yMethod;
}
window.onscroll=scrollFunc
2
z jQuery, można również rejestrować zdarzenia niestandardowe przewijania, który dostarcza zmianę przewijania jako argument do obsługi zdarzenia:
var previous_scroll = $(window).scrollTop();
$(window).on('scroll', function() {
var scroll = $(window).scrollTop(),
scroll_change = scroll - previous_scroll;
previous_scroll = scroll;
$(window).trigger('custom_scroll', [scroll_change]);
});
Wtedy zamiast scroll
, wiążą się custom_scroll
:
$(window).on('custom_scroll', function pos(e, scroll_change) {
console.log(scroll_change);
});
Powiązane problemy
- 1. jQuery/JavaScript: Wykrywanie kierunku przewijania - kwestia struktury kodu
- 2. Wykrywanie przewijania UITableView
- 3. Wykrywanie kierunku wyboru użytkownika za pomocą javascript
- 4. Czy można użyć SFINAE/szablonów, aby sprawdzić, czy operator istnieje?
- 5. Nie można użyć publicznej metody statycznej?
- 6. Czy można użyć metody asynchronicznej void w kontrolce użytkownika ASP.NET?
- 7. Wykrywanie przewijania przez rodzica WPF
- 8. Czy można użyć otwartego adresu URL, aby otworzyć adres URL:
- 9. Czy można użyć std :: enable_if, aby wybrać specjalizację szablonów członków?
- 10. Czy można użyć układu flex, aby wyśrodkować absolutnie pozycjonowany element?
- 11. Czy można użyć funkcji boost :: bind, aby skutecznie łączyć funkcje?
- 12. Aby porównać UUID, czy mogę użyć == lub użyć UUID.equals (UUID)?
- 13. routing kręgosłupa wykrywanie, czy do przodu czy do tyłu wciśnięty
- 14. Wykrywanie kierunku gestów przesuwania za pomocą Leap Motion
- 15. Zwiększ dokładność logu apache, aby uwzględnić milisekundy.
- 16. Czy mogę użyć adnotacji w treści metody?
- 17. Czy można użyć metody "setObject" metody PreParedStatement dla dowolnego typu danych?
- 18. Czy wykrywanie UPnP można wykonać z Javascript?
- 19. Czy można malować na paskach przewijania?
- 20. Aby użyć lub nie użyć wzorca stanu?
- 21. Aby użyć "emulatePrepare" w Yii, czy nie?
- 22. Czy można użyć ratunku z warunkowym?
- 23. Określanie kierunku pionowego touchmapy
- 24. Błąd FPDF: nie można uwzględnić metryki fontów
- 25. Kiedy użyć metody save: metody NSManagedObjectContext
- 26. Widoczne przepełnienie w jednym kierunku z przewijaniem w innym kierunku
- 27. Dlaczego "nie można użyć obiektu jako parametru do metody"?
- 28. jaki sposób można użyć metody rozszerzenie VB.NET w C# projektu
- 29. Czy można użyć losowego identyfikatora tekstury?
- 30. Dlaczego nie można użyć metody prywatnej w lambda?
+1: to też zamierzałem powiedzieć. Jedyne, co muszę dodać to to, że może istnieć jakieś urządzenie wejściowe, które pozwala ci swobodnie przewijać (nie ograniczając się tylko do X lub Y), więc zepsułbym jeden duży IF na dwa. Jeśli jest to pierwszy zwój, możesz również założyć, że spada lub jest w prawo. Możesz również sprawdzić, co dzieje się z linkami wewnętrznymi (np. Href = "# top"). – nickf
Działa naprawdę dobrze! Ciekawe, jak mogę obliczyć prędkość przewijania? –
Myślę, że możesz uzyskać znacznik czasu zdarzeń. Znajdź różnicę między dwoma kolejnymi zdarzeniami i podziel różnice obliczone powyżej przez różnicę znacznika czasowego. –