我遇到.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
其他信息:
我真的很感激任何帮助。
谢谢。
答案 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秒后清除间隔。
再次感谢您帮助我解决这个问题!