2011-07-13 3 views
102

Im pliquer pour animer le défilement vers un ID particulier au chargement de la page. Je l'ai fait beaucoup de recherche et suis tombé sur ceci:Animer défiler jusqu'à ID lors du chargement de la page

$("html, body").animate({ scrollTop: $('#title1').height() }, 1000); 

mais cela semble commencer à partir de l'ID et l'animation en haut de la page?

Le code HTML (ce qui est à mi-chemin vers le bas la page) est simplement:

<h2 id="title1">Title here</h2> 
+1

Ce n'est pas vraiment une réponse, mais je recommande fortement le plugin "scrollTo" d'Ariel Flesler; il a beaucoup de fonctionnalités pour le panoramique sur une page, et quelques extensions du plugin pour les cas courants (par exemple, vous pouvez trouver son plugin "LocalScroll" utile pour faire défiler vers un lien href si c'est sur la même page). Vous pouvez obtenir le plugin ici: http://flesler.blogspot.com/2007/10/jqueryscrollto.html – Faisal

+0

L'OP est vieux mais je vais partager ce post pour d'autres venant de SE. Voici un article qui partage une fonction simple pour résoudre le problème: http://smartik.ws/2015/01/super-simple-animate-scroll-to-id-using-jquery/ –

Répondre

276

Vous faites défiler que la hauteur de votre élément. offset() renvoie les coordonnées d'un élément par rapport au document et top param vous donnera la distance de l'élément en pixels le long de l'axe y:

$("html, body").animate({ scrollTop: $('#title1').offset().top }, 1000); 

Et vous pouvez également ajouter un délai à elle:

$("html, body").delay(2000).animate({scrollTop: $('#title1').offset().top }, 2000); 
+1

En quoi consiste le défilement automatique? moi allez "WOW COOL !!"? Peut-être que c'est la simplicité de votre solution. – theblang

+0

J'avais besoin de faire défiler un élément à la vue lors du chargement de la page, mais j'avais deux problèmes: a) l'utilisation de "html, body" donnait deux rappels (un pour chaque élément correspondant). b) Cela dépend du navigateur qui fonctionne ou du html. J'ai donc fait un brin que vous pouvez adapter à utiliser dans votre projet pour vous assurer que le défilement à l'écran fonctionne sur n'importe quel navigateur et que vous n'obtiendrez qu'un rappel à la fin de l'animation. https: //gist.github.com/netsi1964/4ddffe1ae14e05220d25 – Netsi1964

+1

Ce n'est pas vraiment correct. Vous devriez vraiment considérer la position de défilement actuelle du corps ou de l'élément que nous essayons de "faire défiler". Dans cet esprit, vous devez ajouter la position de défilement actuelle de la position 'body' à la position' offset(). Top' de l'élément que nous voulons voir. La somme résultante est la valeur que nous voulons faire défiler. '$ (' html, body '). animate ({scrollTop: ($ (' html, body '). scrollTop() + $ (' # title1 '). offset(). top)}, 1000); ' – magreenberg

3

Il existe un plugin jquery pour cela. Il fait défiler le document vers un élément spécifique, de sorte qu'il serait parfaitement au milieu de la fenêtre. Il prend également en charge les facilités d'animation afin que l'effet de défilement semble super lisse. Vérifiez this link.

Dans votre cas, le code est

$("#title1").animatedScroll({easing: "easeOutExpo"}); 
+0

"Il prend également en charge les facilités d'animation pour que l'effet de défilement semble super lisse" Malheureusement, cela ne tient pas vrai. Si l'ordinateur est lent pour une raison quelconque, il continue à sauter sans se déplacer correctement. – brunoais

+0

Le défilement lisse nécessite de nombreux pixels à calculer. Bien sûr, un "ordinateur" lent (plus de GPU) ne peut pas le faire mais en raison du manque d'ALU. Donc, généralement, il a raison. Et très facile de défilement lib. – Roland

1

essayez avec le code suivant. font éléments avec un nom de classe en page et faire défiler garder le nom identifiant à href des liens correspondant

$('a.page-scroll').bind('click', function(event) { 
     var $anchor = $(this); 
     $('html, body').stop().animate({ 
      scrollTop: ($($anchor.attr('href')).offset().top - 50) 
     }, 1250, 'easeInOutExpo'); 
     event.preventDefault(); 
    }); 
4

solution javascript pur avec scrollIntoView() fonction:

document.getElementById('title1').scrollIntoView({block: 'start', behavior: 'smooth'});
<h2 id="title1">Some title</h2>

post-scriptum Le paramètre 'smooth' fonctionne maintenant à partir de Chrome 61 en tant que julien_c mentionné dans les commentaires.

+1

Fonctionne maintenant (à partir de Chrome 61) –

Questions connexes