在setTimeout()完成之前忽略新输入

时间:2012-08-14 16:35:47

标签: javascript settimeout

我有一个javascript函数,当你将鼠标悬停在图像上时,它会将该图像的id更改为具有关键帧动画的id,因此它会飞行10秒钟然后返回到它开始的位置。此时你应该能够再次鼠标悬停,它会以同样的方式飞行。

我的问题是如何让它在飞来飞去时忽略任何鼠标悬停?我现在有这样的事情:

<script>
  function fly(element){
    element.id="flynow";
    setTimeout( function(){stopflying(element)}, 10000 );
  }

  function stopflying(element){ 
    element.id="";
  }
</script>

2 个答案:

答案 0 :(得分:1)

我为此编写了自己的测试函数,虽然我没有使用与您相同的输出方法,但onmouseover事件应该是相同的。

我所做的只是创建一个用于存储布尔值的全局变量。这可以告诉您是否在飞行途中。我假设你一次只想要一个元素飞行,对吗?

我的代码:

var isFlying = false;
function fly(element){
    if(!flying){
        flying=true;
        element.id="flynow";
        setTimeout(function(){stopflying(element)} , 10000);
    }
}

function stopflying(){
    flying=false;
    element.id="";
}

这应该只允许1个元素一次飞行,无论onmouseover被调用多少次。

答案 1 :(得分:0)

如果你也没有调整超时毫秒,它似乎忽略了超时。

例如:

setTimeout("smoothscroll" , 1000)
setTimeout("smoothscroll" , 1000)
setTimeout("smoothscroll" , 1000)
setTimeout("smoothscroll" , 1000)
setTimeout("smoothscroll" , 1000)

不会同时触发5个功能,但是所有这些功能同时发出,并且在1秒内它们将同时响应,看起来好像超时被忽略了。

setTimeout("smoothscroll" , 1000)
setTimeout("smoothscroll" , 2000)
setTimeout("smoothscroll" , 3000)
setTimeout("smoothscroll" , 4000)
setTimeout("smoothscroll" , 5000)

会立刻开火,但他们会相隔一秒钟,这是理想的结果。

这种现象是在循环中创建还是作为单独的命令无关紧要。

希望这有帮助。

尼科