这很可能只是我的一个令人沮丧的语法错误。但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次。
发布于 2012-03-01 02:51:31
我认为转换事件没有被触发,但是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事件触发
resizeTime的间隔id被覆盖,先前间隔的id丢失,但是该间隔仍然有效被设置为新的超时H224H125因此现在有4件事有效-2间隔,2 timeouts
resizeTimetransitionevent触发,它也只会清除最新的间隔为了让您的代码正常工作,每个adapt事件后都应该有一个transitionevent,但实际上没有。因此,我们必须清除活动间隔和活动超时,以便一次只有一个活动,当超时结束时,函数也会清除间隔。
https://stackoverflow.com/questions/9501813
复制相似问题