避免 setInterval() 在间隔开始时执行
Posted
技术标签:
【中文标题】避免 setInterval() 在间隔开始时执行【英文标题】:Avoid setInterval() executing at start of interval 【发布时间】:2017-09-19 09:28:19 【问题描述】:我注意到 setInterval() 函数实际上在间隔开始时运行(如,接受值),然后在间隔结束时等待并返回结果。 如果值在中间间隔发生变化,它仍然会像开始时那样执行。这会在我的滑块中导致不需要的行为。 有没有办法强制 setInterval() 在间隔的最后做这两个?最好不要使用 jQuery。
编辑:当我将代码转换为在此处发布时,问题自行解决了。原来这与我的问题无关。对不起,下次我一定会发布代码。谢谢你的回答! :) 希望他们将来能帮助别人,因为无论如何我都找不到这样的问题。
【问题讨论】:
我想我明白你的意思,但你应该显示一些代码以便我们帮助你。 到目前为止你尝试过什么? :) 【参考方案1】:是的。递归使用 setTimeout,这通常是更好的主意。
function doSomething()
setTimeout(function ()
console.log('something')
doSomething()
, 2000)
console.log('start')
doSomething()
【讨论】:
【参考方案2】:您应该发布一些代码。我不完全确定这是否是你的问题,但如果你看看这个:
setInterval(() =>
var message = 'ok';
console.log(message);
, 1000);
message = 'not ok';
在 setInterval 中定义的 'message' 变量的作用域是传递给 setInterval 的函数。因此,当我尝试在该范围之外更改变量时,它将不起作用。我实际上不小心在窗口对象上创建了一个新变量。
但是,如果我这样做:
var message = 'ok';
setInterval(() =>
console.log(message);
, 1000);
message = 'not ok';
“message”变量已成功更改,setInterval 将调用该更改的变量。
【讨论】:
【参考方案3】:您可以在window
对象上绑定您需要的变量。
window.myVariable = 'Important String';
setInterval(function()
doSomethingWith(window.myVariable);
, 2000);
// Variable is changed
window.myVariable = 'Less Important String';
【讨论】:
以上是关于避免 setInterval() 在间隔开始时执行的主要内容,如果未能解决你的问题,请参考以下文章
setIntervalsetTimeoutrequestAnimationFrame
在if语句中添加window.location时,setInterval会冻结