Détecter si un défilement de l'événement est déclenché manuellement en jQuery
Cette question a déjà été posée ici il y a longtemps:
Détecter jquery événement de déclenchement par l'utilisateur ou de l'appel par le code
Mais il n'a jamais été répondu de façon concluante (ou peut-être que je suis tout simplement pas en mesure de rechercher correctement).
Est-il possible de détecter si un scroll
événement a été déclenché par l'utilisateur ou par le jQuery animate
fonction?
Je suis en train d'essayer d'empêcher le scroll
événement pour déclencher lui-même tout en faisant quelque chose comme ceci:
$(document).scroll(function(){
$("html").stop(true);
var number = 400; //some other stuff is happening here
clearTimeout(tout);
tout = setTimeout(function(){
if(top == $(document).scrollTop()){
$("html").animate({
scrollTop: (number),
easing: "easeInQuad",
duration: 110
});
}
},120);
});
Ce code semble être adaptée:
$('#scroller').scroll(function(e) {
if (e.originalEvent) {
console.log('scroll happen manual scroll');
} else {
console.log('scroll happen by call');
}
});
Mais la originalEvent
objet n'est pas en mesure de détecter les animer déclencher correctement.
Est-il un autre moyen pour ce faire?
OriginalL'auteur BluBb_mADe | 2013-12-23
Vous devez vous connecter pour publier un commentaire.
Peut-être
:animated
sélecteur va vous aider à:Démo
merci beaucoup. exactement ce que je cherche.
démo url est maintenant mort =(
Cela ne fonctionne pas comme prévu car jquery changements
.is(':animated')
est fausse, ALORS les parchemins de 1 pixel. Que 1px de défilement déclenche l'événement scroll, mais cette fois avec.is(':animated')
défini à false, ce qui rend.is(':animated')
presque totalement inutile pour ce cas d'utilisation, sauf si vous pouvez trouver un moyen de contourner le bug.veuillez voir ma solution ci-dessous pour le problème que vous: stackoverflow.com/a/39606080/575594
OriginalL'auteur Tony
Je ne sais pas comment cela fonctionne avec les appareils à écran tactile, mais cela fonctionne pour moi sur le bureau au moins
Je ne pense pas qu'il y est une façon de ne cibler que l'animation de défilement (accepté la réponse n'a pas fonctionné pour moi).
Mise à JOUR: Attention!
Malheureusement,
'mousewheel'
ne semble pas, pour reprendre les utilisateurs qui saisir manuellement la barre de défilement et faites-le glisser ou les utilisateurs qui utilisent la barre de défilement touches fléchées 🙁Cela fonctionne toujours ok pour les appareils à écran tactile comme leur glisse semblent compter de la souris fait défiler. Ce n'est pas une bonne solution pour les utilisateurs de pc de bureau.
OriginalL'auteur Daniel Tonon
À l'aide de @Tony accepté de répondre et @DanielTonon le commentaire que j'ai trouvé la solution suivante:
Cela semble résoudre le problème mentionné par lequel jquery supprime la
.is(':animated')
puis se déplace d'un plus de pixels, ce qui conduit à.is(':animated')
se terminant sur un faux. Par le stockage de la deuxième à la dernière version de.is(':animated')
vous pouvez être (plus) sûr de savoir si ou de ne pas le défilement était un animé ou pas.Lorsque vous voulez savoir si le livre a été animées ou non, il suffit de cocher la
lastAnimatedScroll
variable.Cela n'a PAS été testé par moi, mais a été correct sur beaucoup de page mises à jour, donc je vais supposer qu'il fonctionne assez bien.
OriginalL'auteur cwal