ナビゲーション バーとそのプラグインを作成しました。下の私の画像に示されているように、デザインはシンプルです
マウスがオプションの上を通過すると、赤い線がオプションの上に移動します。マウスがナビゲーション バー全体から移動すると、赤い線は元の位置に戻ります。以下はプラグインです。
(function($){
$.fn.MyNavSlider = function(){
var bar,slide,pos,width,deflt;
bar=$(this);
slide=$('.myslider');
pos=bar.position();
width=bar.width();
deflt=$("#Nav_bar");
bar.on('mouseenter',function(){
slide.animate({'left': pos.left + 'px', 'width': width + 'px'}, 300);
});
//(first attempt)if I use th below code the weird behaviour begins
bar.on('mouseleave',function(){
slide.animate({'left': '0px', 'width':'20px'}, 300);
});
/*(Second attempt)I also tried the following
deflt.on('mouseleave',function(){
//back to original position
});
*/
}
})( jQuery );
$("div.Mylinks").each(function(){
$(this).MyNavSlider();
});
そして、これがhtmlのレイアウトです:
<div id="Nav_bar">
<div id="Slider_holder">
<div class="myslider"></div>
</div>
<div id="Nav_bar">
<div class="Mylinks">Option 1</div>
<div class="Mylinks">Option 2</div>
<div class="Mylinks">Option 3</div>
<div class="Mylinks">Option 4</div>
//......etc
</div>
</div>
オプションの移動は正常に機能します。(最初の試行)でコードを使用すると、マウスが新しいオプションの上に移動するたびに、赤いマーカーが元の位置に移動してから新しいオプションに移動します。(2 回目の試行) を使用すると、オプションからマウスを移動すると、マウスをオプションの上に戻すまで何も実行されず、元の位置に移動してから新しいオプションに移動します。私も試しました:
bar.on('mouseleave',function(){
//my code to execute
});
と :
bar.on({
mouseenter: function(){
//code to execute
},
mouseleave: function(){
//code to execute
}
});
と :
bar.on('hover',function(){
//code to execute
});
deflt.animate({'left':'0px','width':'20px'});
関数にイベントを追加してから、mouseleave 関数内で次のようなことを行いました。
if(bar.har(e.target).length > 0)
{
//execute reset code
}
//the event was added to $.fn.MyNavSlider = function(event) line
私が望むのは、マウスがその上を通過するときに赤いマーカーがすべてのオプションをスムーズに遷移し、マウスがナビゲーションバーの上から移動すると元の位置に戻ることだけです。このために JsFiddle も作成しました。私は JsFiddle を初めて使用するので、それを機能させることもできません。マイファーストフィドル