在“setInterval()”中添加超时?

时间:2011-07-06 09:06:57

标签: javascript

我在Divbox上有如下所示的setInterval函数,所以如果我离开divbox ,则会触发 setInterval

setInterval("playthis()", 1000);

我想要它做什么:如果我离开divbox并让我们在接下来的2秒内重新启动它,则setInterval应该触发。

这可能吗?

3 个答案:

答案 0 :(得分:5)

您可以使用堂兄setTimeoutclearTimeout设置一个函数回调,仅在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)