就我而言,这很可能只是一个令人沮丧的语法错误。但是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);
编辑:
发生的是
adapt
事件触发resizeTime
adapt
事件再次触发ojit_rliresizeTime
resizeTime
被覆盖,因此丢失了先前间隔的ID,但是该间隔仍处于事件状态resizeTime
的第20个值所指向的间隔transitionevent
触发,它也只会清除最新间隔为了使您的代码正常工作,每个
transitionevent
事件后都应该有一个adapt
,但没有。因此,我们必须清除事件间隔和事件超时,以使每次一次只有一个事件间隔,并且当超时结束时,该功能也会清除间隔。关于javascript - clearInterval不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9501813/