Javascript 将超时添加到";setInterval();?

Javascript 将超时添加到";setInterval();?,javascript,Javascript,我在一个Divbox上有一个如下所示的setInterval函数,因此如果我离开一个Divbox,这个setInterval将被触发: setInterval("playthis()", 1000); 我希望它做什么:如果我离开divbox,让我们说在接下来的2秒钟内重新覆盖它,setInterval应该不会触发 这可能吗?是的。只要创造性地使用clearInterval() 换句话说,不,这样的功能不是现成的,但是如果鼠标在间隔触发之前重新进入divbox,您可以通过调用clearInter

我在一个Divbox上有一个如下所示的setInterval函数,因此如果我离开一个Divbox,这个setInterval将被触发

setInterval("playthis()", 1000);
我希望它做什么:如果我离开divbox,让我们说在接下来的2秒钟内重新覆盖它,setInterval应该不会触发


这可能吗?

是的。只要创造性地使用
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);
}

您可以使用cousins
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;
}

不过,您需要的变量/函数名要比这个好得多。

首先,在setInterval中对代码求值是一种不好的做法,因此您应该避免使用双引号。然后可以按如下方式清除间隔:

 var int = setInterval(playthis, 1000);
 clearInterval(int)

我这么做了,但我想让这个暂停it@Tomalak格雷特卡尔-啊,你知道,只是想成为第一个发布答案的人@维尔克斯:啧啧。。。这不是比赛@Tomalak Geret'kal-是的,如果你想找代表的话;)@维尔克斯:但这不是我们来这里的目的!或者使用匿名函数,完全不使用名称。@Vilx:与问题关键无关的改动。因此写在注释中。:)