我有一个久经考验的代码,一直对我很好,但我正在尝试新的东西。我没有使用正文的滚动位置,而是我有一个ID为#main
的div,其溢出为auto。
我遇到的问题是,当您点击页面链接时(从#main
div内部或外部),页面会移动但不会移动到正确的位置。可能导致此问题的原因
$('.scrollto').click(function() {
var elementClicked = $(this).attr("href");
var destination = $(elementClicked).offset().top;
$("#main:not(:animated)").animate({ scrollTop: destination} );
return false;
});
这是#main
的CSS:
#main {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
z-index: 2;
overflow: auto;
overflow-x: hidden;
background: #fff;
-webkit-overflow-scrolling: touch;
}
修改
在@Moje的一点帮助下,我在这里重新创建了这个问题:http://codepen.io/anon/pen/xbLyJ
点击“点击我转到目标1”链接。在该部分中,您将看到另一个指向目标2的链接。单击该链接,它将无法完全转到正确的ID。如果您一直点击相同的链接,每次执行此页面时页面都会上下移动。
答案 0 :(得分:3)
我看到了你的codepen示例,我注意到了一个错误。错误是您没有添加实际滚动值。一个简单的例子是当你单击并且scrollTop值为0时,它工作正常,但是当scrollTop值不为0时,destination
值与滚动时的destination
值不同0。
您可以看到分叉的示例here。
另外,我建议您使用event.preventDefault()
代替return false;
,以避免更改或URL重定向。
答案 1 :(得分:2)
似乎适合我。 Codepen - > http://codepen.io/mrmoje/pen/waBls
我用你的例子&编辑了我的笔。看到了你的意思。 (我也改名为一些变种以反映他们的真实目的)
所以......,在animate的回调中记录生成的scrolltop
值之后,我发现#main
的真实目标scrollTop值应该是目标元素的offset().top
+当前值(或预先滚动)$(#main').scrollTop()
。
结帐the updated pen了解我的意思。