我在Divbox上有如下所示的setInterval函数,所以如果我离开divbox ,则会触发 setInterval :
setInterval("playthis()", 1000);
我想要它做什么:如果我离开divbox并让我们在接下来的2秒内重新启动它,则setInterval应该不触发。
这可能吗?
答案 0 :(得分:5)
您可以使用堂兄setTimeout
和clearTimeout
设置一个函数回调,仅在2个不间断的秒后调用setInterval
:
var handle = null;
function yourDivboxLeaveHandler() {
handle = setTimeout(startPlay, 2000);
}
function yourDivboxHoverHandler() {
if (handle !== null) {
clearTimeout(handle);
handle = null;
}
}
function startPlay() {
setInterval(playthis, 1000); // use function references please, not eval
handle = null;
}
你会想要比这更好的变量/函数名称。
答案 1 :(得分:2)
是。只需创造性地使用clearInterval()
。
换句话说,不,这样的功能不是开箱即用的,但如果鼠标在触发间隔之前重新进入divbox,则可以通过调用clearInterval()
来自行构建它
例如:
var divBox = document.getElementById('MyDivBox');
var TimeoutHandle = null;
divBox.onmouseover = function()
{
if ( TimeoutHandle != null )
{
clearTimeout(TimeoutHandle);
}
}
divBox.onmouseout = function()
{
TimeoutHandle = setTimeout(function()
{
TimeoutHandle = null;
setInterval(playthis, 1000);
}, 2000);
}
答案 2 :(得分:1)
首先,在setInterval中评估代码是一种不好的做法,所以你应该使用双引号。然后你可以像这样清除间隔:
var int = setInterval(playthis, 1000);
clearInterval(int)