[英]Why does smooth scrollBy only work first time?
我在网站上使用以下代码模仿平滑滚动:
function scrollWindow() {
// window.scrollBy(1040,0)
var timerID = setInterval(function() {
window.scrollBy(104, 0);
if( window.pageXOffset >= 1040 ) clearInterval(timerID);
}, 10);
}
但是,单击“滚动”(scrollWindow函数)后,页面将按其应有的方式滚动1040。
任何后续时间,它都将不起作用,除非我手动滚动回到开头。
我会以为if( window.pageXOffset >= 1040 )
正在取消它是正确的,因为尽管它没有移动 1040,但它已经超出页面上的该点了?
如果是这样,我该如何解决?
是的,您的评估是正确的; 但可以通过以下方法进行纠正:
function scrollWindow() {
var scrolledSoFar = 0;
var scrollStep = 104;
var scrollEnd = 1040;
var timerID = setInterval(function() {
window.scrollBy(scrollStep, 0);
scrolledSoFar += scrollStep;
if( scrolledSoFar >= scrollEnd ) clearInterval(timerID);
}, 10);
}
更新
该代码中的另一个陷阱是您在检查条件之前正在执行scrollBy
。 因此,在页面上,即使滚动到1040之后,单击“ scroll
也会将页面移动一个scrollStep
量。 为防止这种情况,此顺序更好:
function scrollWindow() {
var scrolledSoFar = 0;
var scrollStep = 104;
var scrollEnd = 1040;
var timerID = setInterval(function() {
if( scrolledSoFar < scrollEnd ) {
window.scrollBy(scrollStep, 0);
scrolledSoFar += scrollStep;
} else {
clearInterval(timerID);
}
}, 10);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.