【问题标题】:How to stop a function after ten seconds?如何在十秒后停止功能?
【发布时间】:2019-05-16 16:59:36
【问题描述】:

我在尝试找到一种加载 reddit 页面的方法时发现了这段代码,以便我可以使用 ctrl + f 来查找特定帖子。问题是它只是不断向下滚动并加载页面。我需要找到一种方法在 10 秒后停止它,以便我可以查看我加载的内容。另外我不知道任何javascript,所以我真的找不到任何可以帮助我的东西。

这里是代码

var lastScrollHeight = 0;
function autoScroll() {
  var sh = document.documentElement.scrollHeight;
  if (sh != lastScrollHeight) {
    lastScrollHeight = sh;
    document.documentElement.scrollTop = sh;
  }
}
window.setInterval(autoScroll, 100);

我只是将它粘贴到 Firefox 控制台中。

【问题讨论】:

  • 使用 setTimeout 代替 setInterval
  • 欢迎您!第一个问题的格式真的很好! +1 / 提示:您可以使用代码 sn-p 按钮而不是简单的代码块格式来包含可运行的 JavaScript/CSS/HTML 代码。

标签: javascript timeout settimeout


【解决方案1】:

setInterval() 函数返回一个 ID,您可以使用它来停止它。 只需将其放入setTimeout() 方法中,如下所示:

var myInterval = setInterval(autoscroll, 100);
setTimeout(function(){ clearInterval(myInterval); }, 10000);

【讨论】:

    【解决方案2】:
    ....
    var intervalID = window.setInterval(autoScroll, 100);
    
    setTimeout(function(){
        clearInterval(intervalID);
    }, 10000);
    

    【讨论】:

      【解决方案3】:

      要在一定时间后停止间隔,请使用调用 clearInterval()setTimeout()。这是一个简化的版本(出于演示目的,时间减少到 1 秒)应该会有所帮助:

      function autoScroll(){
        console.log("running")
      }
      
      // save a reference to the interval handle
      let interval = window.setInterval(autoScroll, 100);
      
      // cancel interval after 1 second (1000 ms)
      setTimeout(() => clearInterval(interval), 1000)

      【讨论】:

      • 不是 10 秒,而是 1(至少应该提到),但是,这是我最喜欢的答案,因为它使用本地范围关键字 let 并格式化为可运行的 sn-p。
      • 这是一个公平的观点@Quasimodo'sclone,我添加了关于一秒的评论 - 只是不想等待 10 秒才能看到结果。
      【解决方案4】:

      在使用设置为 10 秒的 setTimeout 后,您只需在循环函数上调用 clearInterval 即可将其停止,您可以通过以下方式实现它:

      var lastScrollHeight = 0;
      function autoScroll() {
          var sh = document.documentElement.scrollHeight;
          if (sh != lastScrollHeight) {
              lastScrollHeight = sh;
              document.documentElement.scrollTop = sh;
          }
      }
      const interval = window.setInterval(autoScroll, 100);
      window.setTimeout(() => {clearInterval(interval)}, 10000);
      

      【讨论】:

      • 谢谢,代码就像我想要的那样工作,但只是发现只是向下滚动并不会真正加载帖子,所以我不能真正使用 ctrl + f 来找到我想要的。大声笑
      • @leo 您是否在 GreaseMonkey/TemperMonkey 中编写用户脚本?如果可能的话,每次加载新内容时直接调用页面的 AJAX 功能将是更好的方法。你在调整哪个网站?
      【解决方案5】:

      您可以使用setTimeout 调用该函数,直到 10 秒结束。

      这是一个立即调用的函数,它每 100 秒调用一次,直到达到 10 秒。

      (function autoScroll(t) {
        t = t || 0;
        if (t < 10000) {
          console.log(t);
          setTimeout(autoScroll, 100, t += 100);
        }
      })();

      【讨论】:

      • 自调用函数表达式的好方法。应该以 100 毫秒的间隔运行。改进:倒计时到 0 并以所需的持续时间调用。
      猜你喜欢
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2012-08-10
      • 1970-01-01
      • 2021-02-08
      • 2011-12-22
      • 2020-01-09
      相关资源
      最近更新 更多