0

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

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

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

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

2 回答 2

1

我为此编写了自己的测试函数,虽然我没有使用与您相同的输出方法,但 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 会被调用多少次。

于 2012-08-14T20:38:02.667 回答
0

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

例如:

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)

将立即解雇它们,但它们会间隔一秒钟做出响应,这是预期的结果。

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

希望这可以帮助。

尼科

于 2013-06-16T21:43:42.463 回答