2009-01-23 6 views

Antwort

22

Schnell Demo here

Grundsätzlich alles, was Sie brauchen, ist

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

Ja, das scheint zu funktionieren. Aber wenn Sie erneut klicken, wird die Seite ruckeln und erneut versucht zu animieren. Gibt es eine Möglichkeit zu überprüfen, ob das Div schon sichtbar ist und nicht animiert? –

+0

JimmyP half unten! – redsquare

+0

aber vielleicht besser als ein anderes 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 .. das ist die lesbarste JS, die ich je gesehen habe! –

+0

Sie könnten an einem generischen jQuery-Plugin interessiert sein, das animiertes Scrollen ausführt (und auch nicht blättert, wenn Elemente sichtbar sind) http://erraticdev.blogspot.com/2011/02/jquery-scroll-into-view- plugin-with.html Es ähnelt dem * scrollTo * Plugin, ist aber einfacher (also schneller) –

Verwandte Themen