0

我在暂停和播放时遇到问题setInterval,每当 IclearInterval和时var = setInterval(func,time),它会在间隔上乘以实例,并且它开始每滴答声调用 2 个函数,依此类推。

这是带有非工作示例的 jsfiddle http://jsfiddle.net/wZWWT/

这是代码:

function test() {
 $(".container").append("<div>Inserted text</div>");   
}

var timer = setInterval(test,2000);

$(".container").on("mouseenter mouseover",function(){
    clearInterval(timer);
}).on("mouseleave mouseout",function(){
    timer = setInterval(test,2000);
})
4

2 回答 2

2

说得通。Mouseleave 和 mouseout 是两个不同的事件。所以你已经创建了两个间隔。

当您创建一个新间隔时,旧的间隔不会被破坏。即使您不存储对它的引用,它也会继续工作

在设置新间隔之前尝试检查您是否有另一个间隔运行:

$(".container").on("mouseenter mouseover",function(){
    clearInterval(timer);
}).on("mouseleave",function(){
    if ( !timer ) timer = setInterval(test,2000);
}).on("mouseout",function(){
    if ( !timer ) timer = setInterval(test,2000);
})
于 2013-05-24T18:08:40.947 回答
1

timer实际上只是一个表示 的整数setInterval()。如果您为其分配一个新setInterval()的,那么timer将具有新的 ID,setInterval()但旧的 ID 不会被取消,并且您不知道它的 ID,因此 ID 会被覆盖。

在您的代码中,两者都在on()调用mouseenter并且mouseover- 两者都在触发,但只有最后一个要执行的 ID 设置为timer变量,所以当它被调用时(两次,但它并没有真正造成任何伤害),mouseleave/mouseout它可以只取消其中一个。

于 2013-05-24T18:12:12.560 回答