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