为什么无法在控制台中循环浏览器窗口?

时间:2019-05-16 16:34:22

标签: javascript loops dom scroll console

我想在控制台中循环浏览器窗口。我想要它,以便每次向下滚动(x)px时我停下来,做点什么,然后再次滚动(x)px,然后停下来,等等。直到页面结尾(它很长,我想解析信息)从中)。

但是当我开始时,我偶然发现了一个问题,即循环结束后,滚动功能仅执行一次。

let i = 0;
scrollDownTillEnd = () => {
  for(i; i<100; i++) {
    window.scrollBy(0, 1000);
  };
scrollDownTillEnd();

(这是一个简化的示例,但思路应该很清楚)

我将代码放在控制台中,位于要滚动的页面上,然后在循环末尾获得i的值,并且仅向下滚动一次。

请给我解释一下,为什么这段代码的行为如此以及如何使其工作(如我之前提到的那样(在每个循环中它都会滚动一点)。

谢谢!

2 个答案:

答案 0 :(得分:0)

让我帮助解决此处发生的一些问题。

1)您正在进行无限循环,因为您没有检查i小于100,即使您每次都递增它。您需要检查i < 100,以便循环最终结束。在您的循环中,0将始终小于100,因此循环将永远不会结束。

2)您的示例中有一个语法错误,因为在调用函数本身之前,实际上并没有使用花括号将scrollDownTillEnd函数关闭。

3)最后,作为一种好的实践,您需要每次将i变量重置为0,以便我们可以一次又一次地运行这段代码。在示例中的设置方式,由于i在第一次运行结束时等于100,因此直到您将i重置为0以后,循环才会再次运行再次。最简单的方法是每次执行此循环时都将i初始化为0。

尝试这样的事情:

scrollDownTillEnd = () => {
    for(let i = 0; i < 100; i++) {
        window.scrollBy(0, 1000);
    };
};
scrollDownTillEnd();

答案 1 :(得分:0)

你可以使用 setInterval() 因为 for 循环只会执行一次

    function scrollDownTillEnd(countryDropdownList)
    {
      let scrollingInterval = setInterval(function(){
      window.scrollBy(0,1000)
      // write your condition
      if (window.scrollHeight > 10000)
      {
      clearInterval(scrollingInterval)
      }
    },100)
    }
scrollDownTillEnd();