2009-01-23 4 views

Répondre

22

Démo rapide here

Fondamentalement, tout ce dont vous avez besoin est

$('html, body').animate({ 
     scrollTop: $('#yourDiv').offset().top 
    }, 3000); 
+0

Ouais qui semble fonctionner. Mais si vous cliquez à nouveau, cela donne un coup de pied à la page et tente de l'animer à nouveau. Existe-t-il un moyen de vérifier si la div est déjà visible et non animée? –

+0

JimmyP aidé ci-dessous! – redsquare

+0

mais peut-être mieux qu'un autre Q! – redsquare

8
$.extend($.expr[':'],{ 
    inView: function(a) { 
     var st = (document.documentElement.scrollTop || document.body.scrollTop), 
      ot = $(a).offset().top, 
      wh = (window.innerHeight && window.innerHeight < $(window).height()) ? window.innerHeight : $(window).height(); 
     return ot > st && ($(a).height() + ot) < (st + wh); 
    } 
}); 

if ($('#whatever').is(':not(:inView)')) { 
    $('html,body').animate({ 
     scrollTop: $('#whatever').offset().top 
    }, 3000); 
} 
+2

+1 Wow .. c'est le JS le plus lisible que j'ai jamais vu! –

+0

Vous pouvez être intéressé par un plugin jQuery générique qui fait défiler l'animation (et qui ne défile pas du tout lorsque les éléments sont visibles) http://erraticdev.blogspot.com/2011/02/jquery-scroll-into-view- plugin-with.html C'est similaire au plugin * scrollTo * mais c'est plus simple (donc plus rapide) –

Questions connexes