直到setTimeout()完成后才忽略新的输入

问题描述:

我有一个javascript函数,当你将鼠标悬停在图像上时,它会将该图像的ID更改为具有关键帧动画的图像,以便它飞行10秒钟然后返回到它开始的位置。此时,您应该可以再次鼠标滑过,并以同样的方式飞行。直到setTimeout()完成后才忽略新的输入

我的问题是我怎样才能让它忽略任何更多的鼠标悬停而飞来飞去?我有这样的事情现在:

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

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

如何触发鼠标悬停? – Jon 2012-08-14 16:37:19

+0

onmouseover =“fly(this);” – Sam 2012-08-14 16:54:09

我写我自己的测试功能,对于这一点,虽然我没有使用相同的输出方法,你的的onmouseover事件应该是相同的。

我所做的只是创建一个全局变量来存储一个布尔值。这表明你是否在飞行中。我假设你一次只想要1个元素,对吧?

我的代码:

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会被称为。

+0

我确实想要有很多元素同时飞行,每个元素都有自己的10秒定时器。我会尝试这段代码,看看我能做些什么。 – Sam 2012-08-14 22:31:34

+0

嘿,我得到它的工作感谢您的想法,我所做的只是改变线,“if(!flying){”to“if(element.id!=”flynow“){”。然后我删除了全局变量,因为它不再需要。 现在它完美的工作,谢谢! – Sam 2012-08-14 23:22:57

如果您还没有调整超时毫秒,它似乎会忽略超时。

例如:

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

将不火的五大功能间隔1秒,但所有这些一次,并在1秒内他们都将同时响应,表现为如果超时已被忽略。

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

会立即解雇他们,但他们会相隔一秒钟,这是期望的结果。

此现象是在循环中创建还是作为单个命令无关紧要。

希望这会有所帮助。

Nico