問題は、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");、アニメーションを実行するスクリプト内のポイントで使用することです。これにより、ブラウザーコンソールを開いて、順序が少しずれているかどうかを確認できます。