Javascript window.scrollBy加速

Javascript window.scrollBy加速,javascript,Javascript,我有一个项目,我正在处理一个网站,它接收信息并将其显示在表格中。如果表格比屏幕大,页面将自动向下滚动,当它到达底部时,将向上滚动,然后重复,重复,向上和向下滚动 我遇到的问题是,每次我向站点发送一大块数据时,scrollBy的速度都会提高。每次刷新都会以递增的速度上下滚动 代码如下: window.onload = function() { ... buildHeader(event); buildTable(event); }; functi

我有一个项目,我正在处理一个网站,它接收信息并将其显示在表格中。如果表格比屏幕大,页面将自动向下滚动,当它到达底部时,将向上滚动,然后重复,重复,向上和向下滚动

我遇到的问题是,每次我向站点发送一大块数据时,scrollBy的速度都会提高。每次刷新都会以递增的速度上下滚动

代码如下:

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,并在每次页面刷新时检查它。但是,从长远来看,您的解决方案似乎更安全。