div中的scrollTop无效

时间:2013-11-06 20:33:37

标签: javascript jquery html css scrolltop

我有一个久经考验的代码,一直对我很好,但我正在尝试新的东西。我没有使用正文的滚动位置,而是我有一个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。如果您一直点击相同的链接,每次执行此页面时页面都会上下移动。

2 个答案:

答案 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了解我的意思。