Je cherche quelque chose à cet effet:
$(window).scroll(function(event){
if (/* magic code*/ ){
// upscroll code
} else {
// downscroll code
}
});
Des idées?
javascript
jquery
Zach
la source
la source
wheel
événement de nos jours: stackoverflow.com/a/33334461/3168107 .Réponses:
Vérifier le courant par
scrollTop
rapport au précédentscrollTop
la source
lastScrollTop
à 0 ou sera-t-il correctement initialisé ??var lastScrollTop = $(window).scrollTop()
fois que le navigateur a mis à jour la position de défilement au chargement de la page.Vous pouvez le faire sans avoir à garder trace du haut de défilement précédent, comme tous les autres exemples l'exigent:
Je ne suis pas un expert en la matière, alors n'hésitez pas à faire des recherches plus approfondies, mais il semble que lorsque vous utilisez
$(element).scroll
, l'événement écouté est un événement de "défilement".Mais si vous écoutez spécifiquement un
mousewheel
événement à l'aide de bind, l'originalEvent
attribut du paramètre d'événement à votre rappel contient des informations différentes. Une partie de cette information estwheelDelta
. S'il est positif, vous avez déplacé la molette de la souris vers le haut. S'il est négatif, vous avez déplacé la molette de la souris vers le bas.Je suppose que les
mousewheel
événements se déclencheront lorsque la molette de la souris tournera, même si la page ne défile pas; un cas dans lequel les événements de «défilement» ne sont probablement pas déclenchés. Si vous le souhaitez, vous pouvez appelerevent.preventDefault()
au bas de votre rappel pour empêcher la page de défiler et pour pouvoir utiliser l'événement molette pour autre chose qu'un défilement de page, comme un type de fonctionnalité de zoom.la source
scrollTop
n'a pas été mise à jour. En fait,$(window).scroll()
n'a pas tiré du tout.Stockez l'emplacement de défilement précédent, puis voyez si le nouveau est supérieur ou inférieur à cela.
Voici un moyen d'éviter toute variable globale ( violon disponible ici ):
la source
Solution existante
Il pourrait y avoir 3 solutions à partir de cette publication et d' autres réponses .
Solution 1
Solution 2
Solution 3
Test multi-navigateur
Je n'ai pas pu le tester sur Safari
chrome 42 (Win 7)
Firefox 37 (Win 7)
IE 11 (Win 8)
IE 10 (Win 7)
IE 9 (Win 7)
IE 8 (Win 7)
Solution combinée
À partir du test multi-navigateurs, j'ai décidé d'utiliser la solution 3 pour les navigateurs courants et la solution 1 pour Firefox et IE 11.
J'ai référé cette réponse pour détecter IE 11.
la source
Safari browser
, il serait utile de compléter la solution.Je comprends qu'il y a déjà eu une réponse acceptée, mais je voulais publier ce que j'utilise au cas où cela pourrait aider quelqu'un. J'obtiens la direction comme
cliphex
avec l'événement mousewheel mais avec le support de Firefox. Il est utile de le faire de cette façon au cas où vous faites quelque chose comme le verrouillage du défilement et que vous ne pouvez pas obtenir le haut du défilement actuel.Voir une version live ici .
la source
Événement de défilement
L' événement de défilement se comporte étrangement dans FF (il est déclenché de nombreuses fois en raison du défilement fluide) mais il fonctionne.
Remarque: Le défilement événement fait est tiré lors du déplacement de la barre de défilement, à l' aide des touches du curseur ou la molette.
Événement de roue
Vous pouvez également jeter un oeil à MDN, il expose une grande information sur l' événement Wheel .
Remarque: l' événement de roue est déclenché uniquement lors de l'utilisation de la roue de souris ; les touches de curseur et le déplacement de la barre de défilement ne déclenchent pas l'événement.
J'ai lu le document et l'exemple: en écoutant cet événement à travers le navigateur
et après quelques tests avec FF, IE, chrome, safari, je me suis retrouvé avec cet extrait:
la source
Dans le cas où vous souhaitez simplement savoir si vous faites défiler vers le haut ou vers le bas à l'aide d'un périphérique de pointeur (souris ou pavé tactile ), vous pouvez utiliser la propriété deltaY de l'
wheel
événement.la source
ou utilisez l' extension de roue de souris , voir ici .
la source
J'ai vu de nombreuses versions de bonnes réponses ici, mais il semble que certaines personnes rencontrent des problèmes de navigateur, c'est donc ma solution.
J'ai utilisé cela avec succès pour détecter la direction dans FF, IE et Chrome ... Je ne l'ai pas testé en safari car j'utilise généralement Windows.
Gardez à l'esprit que j'utilise également ceci pour arrêter tout défilement, donc si vous voulez que le défilement continue, vous devez supprimer le
e.preventDefault(); e.stopPropagation();
la source
Pour ignorer tout snap / momentum / rebond en haut et en bas de la page, voici une version modifiée de la réponse acceptée par Josiah :
la source
Vous pouvez déterminer la direction de la souris.
la source
Utilisez-le pour trouver le sens du défilement. Il s'agit uniquement de trouver la direction du défilement vertical. Prend en charge tous les navigateurs croisés.
Exemple
la source
ce code fonctionne bien avec IE, Firefox, Opera et Chrome:
'wheel mousewheel' et la propriété deltaY doivent être utilisés dans la fonction bind () .
N'oubliez pas: votre utilisateur doit mettre à jour son système et ses navigateurs pour des raisons de sécurité. En 2018, les excuses de "J'ai IE 7" sont absurdes. Nous devons éduquer les utilisateurs.
Bonne journée :)
la source
Restez simple:
jQuery Event Listener Way:
Méthode d'écoute d'événement JavaScript Vanilla:
La fonction reste la même:
J'ai écrit un post plus sur elle indepth ici
la source
Vous pouvez utiliser les options de défilement et de molette pour suivre les mouvements de haut en bas à la fois.
Vous pouvez également remplacer «corps» par (fenêtre).
la source
stockez un incrément dans l'
.data ()
élément de défilement, vous pourrez alors tester le nombre de fois que le défilement a atteint le sommet.la source
Pourquoi personne n'utilise l'
event
objet renvoyé parjQuery
sur scroll?J'utilise
chromium
et je n'ai pas vérifié sur d'autres navigateurs s'ils ont ladir
propriété.la source
Depuis
bind
a été déconseillé sur v3 ("remplacé paron
") etwheel
est maintenant pris en charge , oubliezwheelDelta
:wheel
Compatibilité du navigateur de l'événement sur les MDN (2019-03-18) :la source
if(e.originalEvent.deltaY > 0) { console.log('down'); } else if(e.originalEvent.deltaY < 0) { console.log('up'); } else if(e.originalEvent.deltaX > 0) { console.log('right'); } else if(e.originalEvent.deltaX < 0) { console.log('left'); }
touchmove
événement d' utilisation mobile à la place.Vous pouvez également l'utiliser
la source
dans l'
.data()
élément, vous pouvez stocker un JSON et tester des valeurs pour lancer des événementsla source
Il s'agit d'une détection simple et facile lorsque l'utilisateur défile en haut de la page et lorsqu'il revient en haut.
la source
Il s'agit d'une solution optimale pour détecter la direction au moment où l'utilisateur fait défiler.
la source
Vous devriez essayer ceci
la source
J'ai eu des problèmes avec le défilement élastique (rebond de défilement, élastique). Ignorer l'événement de défilement vers le bas s'il était proche du haut de la page a fonctionné pour moi.
la source
Cela fonctionne dans tous les navigateurs de PC ou de téléphones, développant les meilleures réponses. On peut construire une fenêtre d'objet d'événement plus complexe ["scroll_evt"] puis l'appeler dans la fonction handleScroll (). Celui-ci se déclenche pour 2 conditions simultanées, si un certain délai s'est écoulé ou qu'un certain delta est passé pour éliminer certains déclencheurs indésirables.
la source