Je veux faire défiler en douceur. Je ne veux pas avoir à écrire une fonction pour cela - surtout si jQuery en a déjà une.
javascript
jquery
Bryan Field
la source
la source
html
etbody
? Il y a un aperçu ici: stackoverflow.com/questions/2123690/… , mais ce n'est pas une réponse complète.<html>
aoverflow-x:hidden;
cette animation ne fonctionnera pas. (Pourrait ne pas fonctionneroverflow-y:hidden
, etoverflow:hidden
, mais je n'ai pas testé.body
fonctionné dans Chrome à partir du début de cette année, mais maintenant cela doit êtrehtml
.La réponse de Nick fonctionne très bien. Soyez prudent lorsque vous spécifiez une fonction complete () à l'intérieur de l'appel animate () car elle sera exécutée deux fois car vous avez deux sélecteurs déclarés (html et body).
Voici comment éviter le double rappel.
la source
die()
fonction avantlive()
l'appel de fonction. Cela garantit que votrelive()
gestionnaire ne sera appelé qu'une seule fois.La réponse de Nick fonctionne très bien et les paramètres par défaut sont agréables, mais vous pouvez contrôler plus complètement le défilement en remplissant tous les paramètres facultatifs.
voici à quoi ça ressemble dans l'API:
afin que vous puissiez faire quelque chose comme ça:
voici la page api de la fonction jQuery .animate: http://api.jquery.com/animate/
la source
Comme Kita l'a mentionné, il y a un problème avec le déclenchement de plusieurs rappels lorsque vous animez à la fois sur 'html' et sur 'body'. Au lieu d'animer les deux et de bloquer les rappels ultérieurs, je préfère utiliser une détection de fonctionnalité de base et animer uniquement la propriété scrollTop d'un seul objet.
La réponse acceptée sur cet autre fil donne un aperçu de la propriété scrollTop de l'objet que nous devrions essayer d'animer: défilement et animation de pageYOffset dans IE8
METTRE À JOUR - - -
La tentative de détection de fonctionnalité ci-dessus échoue. Il semble qu'il n'y ait pas de méthode sur une ligne, car la propriété pageYOffset des navigateurs de type webkit renvoie toujours zéro lorsqu'il y a un doctype. Au lieu de cela, j'ai trouvé un moyen d'utiliser une promesse de faire un seul rappel pour chaque exécution de l'animation.
la source
J'ai ce que je crois être une meilleure solution que le
$('html, body')
hack.Ce n'est pas un vol simple, mais le problème que j'ai rencontré
$('html, body')
est que si vous vous connectez$(window).scrollTop()
pendant l'animation, vous verrez que la valeur saute partout, parfois de centaines de pixels (bien que je ne vois rien de tel) visuellement). J'avais besoin que la valeur soit prévisible, pour pouvoir annuler l'animation si l'utilisateur saisissait la barre de défilement ou faisait tourner la molette pendant le défilement automatique.Voici une fonction qui animera le défilement en douceur:
Vous trouverez ci-dessous une version plus complexe qui annulera l'animation sur l'interaction avec l'utilisateur, ainsi que le refiring jusqu'à ce que la valeur cible soit atteinte, ce qui est utile lorsque vous essayez de définir le scrollTop instantanément (par exemple, simplement en appelant
$(window).scrollTop(1000)
- d'après mon expérience, cela ne fonctionne pas) 50% du temps.)la source
J'avais des problèmes où l'animation commençait toujours à partir du haut de la page après un rafraîchissement de la page dans les autres exemples.
J'ai corrigé cela en n'animant pas directement le CSS mais en appelant plutôt
window.scrollTo();
à chaque étape:Cela permet également de contourner le problème
html
vsbody
car il utilise du JavaScript multi-navigateur.Jetez un œil à http://james.padolsey.com/javascript/fun-with-jquerys-animate/ pour plus d'informations sur ce que vous pouvez faire avec la fonction d'animation de jQuery.
la source
Vous pouvez utiliser l'animation jQuery pour la page de défilement avec une durée spécifique:
où 1024px est le décalage de défilement et 5000 est la durée des animations en millisecondes.
la source
$("html, body").animate({scrollTop: 1024}, 5000);
fonctionne également.Essayez le plugin scrollTo .
la source
la source
Si vous souhaitez descendre à la fin de la page (vous n'avez donc pas besoin de faire défiler vers le bas), vous pouvez utiliser:
la source
Mais si vous voulez vraiment ajouter de l'animation pendant le défilement, vous pouvez essayer mon plugin simple ( AnimateScroll ) qui prend actuellement en charge plus de 30 styles d' accélération
la source
le code du navigateur croisé est:
c'est sans animation mais fonctionne partout
la source