2012-04-15 19 views
2

に私はjQueryのロールオーバーメニューでこのサイトを作りました:奇妙な効果/ちらつき()ロールオーバーメニュー

http://www.ffsolar.com/index.php?lang=EN&page=home

それがうまく機能していないことが起こります。 「サービス」ボタンの上の白いスペースからマウスを画像の中央まですばやく移動してください。ストラッジ効果が発生すると、メニューが "ちらつき"始まり、マウスを動かすまで停止しません。

まあ、これは私のjQueryのコードです:これが起こると私はそれについて何を行うことができる理由

$('#main_navi li').hover(
     function() { 
      //show its submenu 
      $('ul', this).stop(true,true).slideDown(200); 
     }, 
     function() { 
      //hide its submenu 
      $('ul', this).stop(true,true).slideUp(200); 
     } 
    ); 

誰かが私に説明できますか?私はstop()でtrueとfalseのすべての組み合わせを試しましたが、うまくいきませんでした。

答えて

1

私はそれを本当に釘付けにすることはできませんが、タイミングの問題であると私には分かります。マウスを実際に速く動かすと、メニュー項目がmouseoverイベントを取得し、メニューが展開されますが、メニューが展開される前に少し後にmouseoutイベントが受信され、折りたたまれますマウスが拡大されたメニューの上にあるので、もう一度マウスオーバーを受け取ります(マウスが動かなくてもマウスオーバー/アウトイベントが送出されるというのは奇妙に思えるので、これは本当に面白いわけではありません)。 ブラウザは移動するすべてのピクセルではなく、数ミリ秒ごとにmousemoveイベントを送出することに注意してください。同様に、mouseoverイベントとoutイベントは、実際に発生した時に必ず送出されるわけではありません。イベントの狂気に関する私の前提が正しいならば、silidesの前にstop()で解決できるはずですが、あなたはすでにそれを試みたと言います。このようにして、スライドはマウスアウト時に直ちに後退するはずです。

編集は、あなたの答えのためのjsFiddle here

+0

感謝を作りましたよ!しかし、これは正しい方法ではありませんか? jQueryでこのロールオーバーメニューを他にどのように実行できましたか?ミリ秒で変化が問題を解決できると思いますか? – jonas23

+0

このように間違っていることは何もありません。同じ方法でやったでしょう。私が言ったように、あなたは 'stop(true、true)'を 'stop(false、false)'または単に 'stop()'(これは同じもの、[ドキュメンテーション](http://api.jquery。 com/stop /))。そうすれば、フリッカーは消えるはずです。なぜなら、メニューはマウスアウトの現在のエクステントからうまく収まるからです。 'stop(true、true)'を使うと、mouseoutのslideDownを止めず、すべての問題を引き起こします。もしあなたが 'stop'を完全に省略すると、うまくいくかもしれません。 –

+0

'stop()'だけを使うと、マウスで説明したことを行った後でサブメニューが開かなくなります。だから私は 'stop()'を削除しました。今すぐ何が起きるかチェックしてください...マウスを別のメニュー項目に素早く動かすとどうなりますか?これはまさに 'stop()'メソッドで避けたかった効果です。これについて何かできることはありますか?あなたの助けをもう一度感謝します、私は非常に感謝します! – jonas23