Burada çoğu insan öneriyorsun aksine, ben tavsiye ederim yapmak size hareket animasyon istiyorsanız eklenti kullanmasına. Sadece scrollTop'u canlandırmak, sorunsuz bir kullanıcı deneyimi için yeterli değildir. Bkz burada cevabımı muhakeme için.
Yıllar boyunca bir dizi eklenti denedim, ama sonunda kendim yazdım. Bir spin vermek isteyebilirsiniz: jQuery.scrollable . Bunu kullanarak kaydırma işlemi
$container.scrollTo( targetPosition );
Ama hepsi bu değil. Hedef pozisyonu da düzeltmemiz gerekiyor. Diğer cevaplarda gördüğünüz hesaplama,
$target.offset().top - $container.offset().top + $container.scrollTop()
çoğunlukla çalışır, ancak tamamen doğru değildir. Kaydırma kabının kenarlığını düzgün işlemiyor. Hedef eleman, kenarlığın boyutuna göre çok yukarı kaydırılır.İşte bir demo.
Bu nedenle, hedef pozisyonu hesaplamanın daha iyi bir yolu
var target = $target[0],
container = $container[0];
targetPosition = $container.scrollTop() + target.getBoundingClientRect().top - container.getBoundingClientRect().top - container.clientTop;
Yine, eylemde görmek için demoya bir göz atın .
Hedef konumu döndüren ve hem pencere hem de pencere olmayan kaydırma kapları için çalışan bir işlev için bu özü kullanmaktan çekinmeyin . Buradaki yorumlar konumun nasıl hesaplandığını açıklar.
Başlangıçta, animasyonlu kaydırma için bir eklenti kullanmanın en iyi olacağını söyledim . Ancak bir geçiş olmadan hedefe atlamak istiyorsanız bir eklentiye ihtiyacınız yoktur. Bunun için @James tarafından verilen cevaba bakın , ancak kabın etrafında bir kenarlık varsa hedef konumu doğru bir şekilde hesapladığınızdan emin olun.