当x很大时,jquery scrollTop(x)不会滚动到目标

时间:2011-11-21 16:12:40

标签: jquery google-chrome position scrolltop

我遇到.scrollTop()

的问题

我有一个页面在卸载时存储会话中的当前scrollTop()位置。 我的目标是当我回到这个页面时,页面会滚动到我上面的最后一个scrollTop位置。

我的JS代码很简单:

console.log('=>'+parseInt(scrollto)+' '+parseInt($(window).scrollTop())); 
$(window).scrollTop(scrollto);
console.log('=>'+parseInt(scrollto)+' '+parseInt($(window).scrollTop()));

我的浏览器控制台中的结果:

=> 2500 0
=> 2500 2500

好的,我的页面滚动到最后一个位置。

问题来自于scrollto变量的大值。 这是我在控制台中得到的:

=> 12352 0
=> 12352 7683

我不明白为什么它没有在要求的位置滚动

我甚至试过这个:

var max_times= 10;

for(var i=0;i<max_times;i++){
console.log('=>'+parseInt(scrollto)+' '+parseInt($(window).scrollTop()));
if (parseInt(scrollto) > parseInt($(window).scrollTop())) 
    $(window).scrollTop(scrollto);
}

结果:

=> 13450 0
=> 13450 7985
=> 13450 7985
=> 13450 7985
...
=> 13450 7985

其他信息:

  • 我在Chrome和Safari上的结果相同。
  • 我正在谈论的页面包含很多图片,因此需要一些 是时候装满了。

我真的很感激任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

@lalibi在询问图像是否具有高度设置方面有一个很好的观点,如果要求滚动到13450,但是当前页面高度小于13450px,那么某些东西将无法正常工作。如果您尝试将scrollTop的超时设置为所有图像都已加载,它是否仍会失败?如果您注意到它没有,那么您将不得不以加载所有图像的方式加载图像然后执行scrollTop或设置图像高度,以便页面确切知道它的高度。

答案 1 :(得分:0)

确定。

我找到了一个有效的解决方案。

感谢您的提示,我们必须参与页面的总高度。

我所做的是:

var timer = setInterval(function(){
    if ((parseInt(scrollto) > parseInt($(window).scrollTop())) && (parseInt($(document).height())>parseInt(scrollto))){
       $(window).scrollTop(scrollto);
       if ($(window).scrollTop()>=scrollto)
           clearInterval(timer);    
    }
},500);

setTimeout(function(){clearInterval(timer);},10000);

我设置了一个间隔,检查页面的总高度是否足以每500ms滚动到所请求的位置。如果是这种情况,它会滚动。如果位置正常,那么我们清除间隔。

如果这些都不起作用,则在10秒后清除间隔。

再次感谢您帮助我解决这个问题!