gpt4 book ai didi

javascript - 清除间隔不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 04:14:03 25 4
gpt4 key购买 nike

这很可能只是我的一个令人沮丧的语法错误。但是 resizeTime 只是不会清除。无论多次使用 clearInterval,计时器都会继续运行。有什么想法吗?我已经发布了我的真实代码:

  var resizeTime; // declared outside of wrapper function to INSURE no second declaration will occur
var myTransitionEvent = whichTransitionEvent();

$(window).bind('adapt', function(){
console.log('start', resizeTime);
resizeTime = setInterval(function(){
console.log('go', resizeTime);
methods.relayoutChildren.apply(self);
}, 5);
setTimeout(function(){
console.log('sNend', resizeTime);
clearInterval(resizeTime);
},1000);

});

$('#allies-wrap').bind(myTransitionEvent, function(){
console.log('end', resizeTime);
clearInterval(resizeTime);
methods.relayoutChildren.apply(self);
});

这是来自 chrome 的示例日志:

  start undefined
start 8215
(10) go 8218
start 8218
start 8221
(256) go 8224
(2) sNend 8224
(9) go 8224
sNend 8224
(3) go 8224
sNend 8224
(2596) go 8224

对于那些不知道 chrome 日志的人来说,(2596) 意味着同一日志出现 2596 次。

最佳答案

我认为 Transition 事件没有被触发,但是 adapt 事件被一次又一次地触发。所以 resizeTime 在事件的被清除之前改变。您可以通过在设置新间隔之前清除间隔来修复它(至少让它变得更好)。

clearInterval(resizeTime);
resizeTime = setInterval(function(){
console.log('go', resizeTime);
methods.relayoutChildren.apply(self);
}, 5);

clearTimeout(sNendTime);
sNendTime = setTimeout(function(){
console.log('sNend', resizeTime);
clearInterval(resizeTime);
},1000);

编辑:

发生的事情是

  1. 适应事件触发器
  2. 设置了一个新的时间间隔并将时间间隔 id 分配给 resizeTime
  3. 设置新的超时时间
  4. 所以现在有 2 件事处于事件状态 - 1 个间隔,1 个超时
  5. 在超时延迟结束之前,再次adapt事件触发
  6. 设置了一个新的时间间隔并将时间间隔 id 分配给 resizeTime
  7. 随着 resizeTime 被覆盖,先前间隔的 id 丢失,但该间隔仍然有效
  8. 设置新的超时时间
  9. 所以现在有 4 个事件 - 2 个间隔,2 个超时
  10. 继续
  11. 1000 秒后,假设有 20 个间隔,20 个超时事件
  12. 第一次调用该函数并清除 resizeTime 的第 20 个值指向的时间间隔
  13. 所以还有 19 个间隔和 19 个超时有效
  14. 继续
  15. 即使transitionevent触发也只会清除最新的interval

要让您的代码正常工作,在每个 adapt 事件之后应该有一个 transitionevent,但实际上并没有。所以我们必须清除事件间隔和事件超时,以便每次只有一个事件,并且当超时结束时,函数也会清除间隔。

关于javascript - 清除间隔不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com