我有一个按钮,当它翻转时会改变div的背景。后台需要在计时器上更改,所以我使用setTimout来执行更改背景的方法。我认为clearTimeout会取消和我设置的超时,所以我把它放在mouseleave事件上。然而它似乎并没有停止超时。我的逻辑就在这里吗?
$("#h2Buzz").mouseenter(function () {
setTimeout(playV(), 2700);
setTimeout(playP(), 5400);
});
$("#h2Buzz").mouseleave(function () {
clearTimeout(playV());
clearTimeout(playP());
});
function playV() {
$("#ServicesBackgroundImage2").css("background-image", "url(/images/v.jpg)");
}
function playPn() {
$("#ServicesBackgroundImage2").css("background-image", "url(/images/p.jpg)");
}
答案 0 :(得分:7)
您错误地使用了setTimeout
和clearTimeout
。 setTimeout
函数返回超时的句柄,该句柄将被传递到clearTimeout
以停止它。
var playVTimeout;
...
playVTimeout = setTimeout(playV, 2700);
....
clearTImeout(playVTimeout);
另请注意,setTimeout(playV(), 2700);
现在会调用playV()
并在2.7秒后执行其返回值。你应该传递一个函数对象playV
。
答案 1 :(得分:6)
将一个变量分配给setTimeout
,然后传递给clearTimeout
以清除它,即
var play_timeout = setTimeout("playV()", 2700);
clearTimeout(play_timeout);
(注意我在第一个setTimeout
参数附近添加了引号)
答案 2 :(得分:1)
当您致电setTimeout
时,它会返回一个数值。您应该存储此值,因为这是clearTimeout所需的。因此,要跟踪两个setTimeout的返回值(它们会有所不同)。并在可以从两个功能访问的范围内跟踪它们。
快'n'脏例子:
var timer = setTimeout( function(){ alert('hi'); }, 300 );
clearTimeout( timer );
另外,你用'playV()'调用setTimeout,这是不正确的,因为它会立即以这种方式调用该函数。您可以将括号放在后面,只需setTimeout( playV, 3500 );