問題は、eachDelay
メニューの「mouseleave」関数内の関数にあるようです。遅延により、ロゴの「マウスエンター」機能の後に#whiteline
アニメーションが起動します。イベントのチェーンは次のとおりです。
- メニュー
mouseleave
が起動します
- メニュー
eachDelay
はメニュー項目をループします
- ロゴ
mouseenter
の火
- メニュー
eachDelay
が最後のアイテムに到達し、ロゴを上書きしますmouseenter
できることは、メニューにフォーカスがなくなったかどうかを確認する変数を導入し#whiteline
、カーソルがロゴ上にない場合にのみアニメーションを起動することです。簡単な例を次に示します。
// Create a variable to check cursor focus
var lastFocus = "";
$('#menu').mouseenter(function(element) {
lastFocus = "menu";
// PLUS YOUR CODE
});
$('#logo').mouseenter(function(element) {
lastFocus = "logo";
// PLUS YOUR CODE
});
$('#menu').mouseleave(function(element) {
$("#menu ul li").eachDelay(function(index){
if(index == $("#menu ul li").size() -1){
// Check if we haven't hovered over the logo whilst the delay was running
if(lastFocus == "menu"){
// Do the animation
}
}
}, 30);
});
便利なデバッグのヒントはconsole.log("Event foo fired");
、アニメーションを実行するスクリプト内のポイントで使用することです。これにより、ブラウザーコンソールを開いて、順序が少しずれているかどうかを確認できます。