Peut-on utiliser la méthode Window.Onscroll pour inclure la détection de la direction de défilement?Peut-on utiliser la méthode Window.Onscroll pour inclure la détection de la direction de défilement?
Peut-on utiliser la méthode Window.Onscroll pour inclure la détection de la direction de défilement?
Répondre
Si vous enregistrez le scrollX et défilez à la page de chargement et chaque fois qu'un événement de défilement se produit, vous pouvez comparer les valeurs précédentes avec les nouvelles valeurs pour savoir dans quelle direction vous avez défilé. Voici une preuve de concept:
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
J'ai eu du mal à faire ce travail dans IE8 (bien qu'il soit conforme pour IE9, FF et Chrome) - tous les rouleaux semblent être détectés comme horizontale.
Voici un script modifié demo qui fonctionne également dans IE8 et peut couvrir un peu plus de navigateurs.
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
Avec jquery, vous pouvez également enregistrer un événement de défilement personnalisé qui fournit le changement de défilement comme argument au gestionnaire d'événements:
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]);
});
Ensuite, au lieu de scroll
, se lient à custom_scroll
:
- 1. détection tactile d'affichage de défilement
- 2. Détection côté client de la méthode de requête HTTP
- 3. La détection et d'agir sur les touches de direction du clavier en Java
- 4. jqueryui dialogue, direction de la diapositive
- 5. clés de détection de direction du clavier en utilisant keyPressed
- 6. Détection de l'architecture de la CPU à la compilation
- 7. Comment substituer la méthode pour appeler la méthode de la superclasse de la superclasse?
- 8. Efficacité de la détection Palindrome
- 9. Détection de la superposition matérielle
- 10. Détection de la fin de la destruction de l'enfant ChucK
- 11. Détection de la lumière ambiante - iPhone
- 12. Détection de la position de défilement à l'intérieur d'un ListView (ou ScrollView)
- 13. Comment déterminer la direction d'un tremblement de l'iPhone
- 14. Quelle est la meilleure méthode pour l'habillage d'un volet de défilement horizontal à l'aide de jQuery?
- 15. Entités de structure d'entité de moulage dans la direction «incorrecte»
- 16. Détection de la longueur de la vidéo Youtube avec Asp.net
- 17. La version du navigateur de détection
- 18. Comment inverser la direction de déplacement de mes rectangles?
- 19. Détection de la falsification de viewstate
- 20. Pygame: Sprite changeant en raison de la direction du mouvement
- 21. Pour chaque boucle AS3: La direction est-elle garantie?
- 22. Datagrid défilement dans Windows s façon Mobile pour se débarrasser de la barre de défilement?
- 23. Vitesse de défilement avec la position de la souris
- 24. WPF RichTextBox - La méthode ScrollToEnd() n'entraîne aucun défilement
- 25. C#: Comment utiliser la méthode Enumerable.Aggregate
- 26. Comment puis-je calculer la direction moyenne de deux vecteurs
- 27. Détection de la radio WAN éteinte
- 28. C# Détection de la carte son
- 29. Personnalisation de la barre de défilement
- 30. Détection de la hauteur de la zone de visualisation en utilisant Javascript
+1: c'est ce que j'allais dire aussi. Les seules choses que j'ai à ajouter est qu'il pourrait y avoir un périphérique d'entrée qui vous permet de faire défiler librement (pas limité à X ou Y), donc je casserais le grand IF en deux. Si c'est le premier parchemin, vous pouvez aussi supposer que ça va vers le bas ou vers la droite. En outre, vous devrez peut-être vérifier ce qui se passe avec les liens intrapage (par exemple: href = "# top"). – nickf
Fonctionne vraiment bien! Je me demande comment je pourrais calculer la vitesse de défilement? –
Je pense que vous pouvez obtenir l'horodatage des événements. Trouvez la différence entre deux événements consécutifs et divisez les différences calculées ci-dessus par la différence d'horodatage. –