首页 > 解决方案 > 只需尝试在 javascript 中每 1 秒向下滚动一次

问题描述

我尝试使用该setTimeout功能 3 次,但由于某种原因它不起作用。我的印象是我必须使用clearTimeout

handle = setTimeout(function(){
    window.scrollBy(0, 1000);
}, 1000);
window.clearTimeout(handle)

handle = setTimeout(function(){
    window.scrollBy(0, 1000);
}, 1000);
window.clearTimeout(handle)

handle = setTimeout(function(){
    window.scrollBy(0, 1000);
}, 1000);
window.clearTimeout(handle)

但这不起作用。我不确定为什么。在运行下一个之前,我每次都在学习超时句柄。我在这里做错了什么?

编辑

使用该setInterval()函数导致我得到另一个错误。这是示例:

var myVar = setInterval(scrollDown(), 5000);

function scrollDown() {
    window.scrollBy(0,1500);
}

以及来自控制台的错误:

拒绝将字符串评估为 JavaScript,因为 'unsafe-eval' 不是以下内容安全策略指令中允许的脚本来源:“script-src 'report-sample' 'sha256-6gLjSWp3GRKZCUFvRX5aGHtECD1wVRgJOJp7r0ZQjV0='

所以我知道启用了内容安全策略,但是向下滚动与此有什么关系?不知道为什么会这样。

标签: javascript

解决方案


无需清除超时,因为这将取消您挂起的函数调用。而是尝试使用 3 个不同的时间间隔(1000、2000、3000)调用 setTimeout 或使用 setInterval 并在第三次调用后取消

// setTimeout
setTimeout(function(){
  window.scrollBy(0, 1000);
}, 1000);
setTimeout(function(){
  window.scrollBy(0, 1000);
}, 2000);
setTimeout(function(){
  window.scrollBy(0, 1000);
}, 3000);

// setInterval
var i = 0;
var handle = setInterval(function(){
  window.scrollBy(0, 1000);
  i++;
  if (i === 3) {
    clearInterval(handle);
  }
}, 1000);

推荐阅读