jQuery动画scrollTop

ayy*_*yyp 15 javascript jquery animation scrolltop

section在div中有很多标签,溢出设置为hidden.代码是这样的:


<div id="viewport">
   <section>
      content
   </section>
   <section>
      content
   </section>
</div>
Run Code Online (Sandbox Code Playgroud)

我把它设置为这样,因为我希望能够在菜单中按下相应链接时滚动浏览sections包含内容div.我有这个功能:


$('#mn a').click(function(){
   var aHref = $(this).attr("href");
   var sectionHeight = $('section'+aHref+'').height();
   $('#viewport').height(sectionHeight);
});
Run Code Online (Sandbox Code Playgroud)

我用它来调整#viewportdiv的大小,因为sections它们的大小不同.当我尝试将此滚动部分放入该函数时:


$('body,html').animate({scrollTop: $(aHref).offset().top}, 800);
Run Code Online (Sandbox Code Playgroud)

它使整个页面滚动.当我尝试$('body,html')$('section, #viewport')它替换它时,在div内部滚动,但它没有正确地执行.

在这里有一个实例.我认为这与.offset()我传入的内容有什么关系.animate(),但是我尝试了很多不同的东西,但无济于事.有人可以指出我正确的方向或告诉我我做错了什么?

小智 11

问题是如何position()工作,它返回顶部/高度相关scrollTop.

因此,如果您在点击时请求,$('section'+aHref+'').position().top则返回的位置将从scrollTop值修改.

您可以在准备好的活动中获得所有高度位置.(所以scrollTop0)

或者您可以使用以下方法清理位置值:

$("section#skills").position().top + $("#viewport").scrollTop()
Run Code Online (Sandbox Code Playgroud)


Sha*_*oli 8

首先,您应该阻止锚点的默认行为,以便将页面滚动到页面顶部.您可以通过preventDefault()click事件处理程序内的事件对象上调用方法来完成此操作.试试这个

$('#mn a').click(function(e){
   e.preventDefault();

   var aHref = $(this).attr("href");
   var top = $('section'+aHref+'').position().top;
   $('#viewport').animate({scrollTop: top}, 800);
});
Run Code Online (Sandbox Code Playgroud)