0

画像にマウスを合わせると、その画像のIDがキーフレームアニメーションのあるIDに変更されるため、10秒間飛び回ってから、元の場所に戻るjavascript関数があります。その時点で、もう一度マウスオーバーできるはずで、同じように飛行します。

私の質問は、それが飛び回っている間、それ以上のマウスオーバーを無視させるにはどうすればよいですか?私は今このようなものを持っています:

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

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

2 に答える 2

1

このために独自のテスト関数を作成しました。あなたと同じ出力方法を使用していませんが、マウスオーバーイベントは同じである必要があります。

私がしたのは、ブール値を格納するためのグローバル変数を作成することだけでした。これは、飛行中かどうかを示します。一度に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つの要素のみが飛行できるようにするために機能するはずです。

于 2012-08-14T20:38:02.667 に答える
0

タイムアウトミリ秒も調整しない場合、タイムアウトを無視したように見えます。

例えば:

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

5つの関数を1秒間隔で起動しませんが、すべてを一度に起動し、1秒以内にすべてが同時に応答し、タイムアウトが無視されたかのように見えます。

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

一度に発射しますが、1秒間隔で応答します。これは望ましい結果です。

この現象がループで発生するのか、個々のコマンドとして発生するのかは関係ありません。

お役に立てれば。

ニコ

于 2013-06-16T21:43:42.463 に答える