Javascript window.scrollBy加速
我有一个项目,我正在处理一个网站,它接收信息并将其显示在表格中。如果表格比屏幕大,页面将自动向下滚动,当它到达底部时,将向上滚动,然后重复,重复,向上和向下滚动 我遇到的问题是,每次我向站点发送一大块数据时,scrollBy的速度都会提高。每次刷新都会以递增的速度上下滚动 代码如下:Javascript window.scrollBy加速,javascript,Javascript,我有一个项目,我正在处理一个网站,它接收信息并将其显示在表格中。如果表格比屏幕大,页面将自动向下滚动,当它到达底部时,将向上滚动,然后重复,重复,向上和向下滚动 我遇到的问题是,每次我向站点发送一大块数据时,scrollBy的速度都会提高。每次刷新都会以递增的速度上下滚动 代码如下: window.onload = function() { ... buildHeader(event); buildTable(event); }; functi
window.onload = function() {
...
buildHeader(event);
buildTable(event);
};
function buildTable(event) {
...
if((+tableHeight) > window.innerHeight){
pageScroll();
}
}
var scrollDirection = 1;
function pageScroll() {
window.scrollBy(0,scrollDirection); // horizontal and vertical scroll increments
scrolldelay = setTimeout('pageScroll()',50); // scrolls every 50 milliseconds
if ( (window.scrollY === 0) || (window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
scrollDirection = -1*scrollDirection;
}
}
我想知道为什么每次发送页面信息时速度都会增加。再次调用之前是否需要取消正在发生的scrollBy
任何帮助都将不胜感激
谢谢
乔希是的,是的。如果您调用scrollby两次,它将滚动两次。您有一个自调用超时,这意味着它将重复调用该函数。超时是异步的,不会因为发生了更改而取消 幸运的是,setTimeout返回一个可以传递给clearTimeout的ID 所以你可以这样做:
var currentTimeout;
function buildTable(event) {...
if ((+tableHeight) > window.innerHeight) {
window.clearTimeout(currentTimeout);
pageScroll();
}
}
function pageScroll() {
window.scrollBy(0, scrollDirection); // horizontal and vertical scroll increments
currentTimeout = setTimeout('pageScroll()', 50); // scrolls every 50 milliseconds
if ((window.scrollY === 0) || (window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
scrollDirection = -1 * scrollDirection;
}
}
下面是一个更简单的示例来演示该行为 感谢您提供此解决方案。我已经确认它与我的网站。或者,我也可以通过添加一个布尔值来解决这个问题,在调用第一个页面滚动时设置为true,并在每次页面刷新时检查它。但是,从长远来看,您的解决方案似乎更安全。