メニューを作成し、mouseover (mouseenter) と mouseout(mouseleave) を使用しようとしましたが、残念ながらマウスを速く動かすと、一部のイベントが発生せず、ホバー イメージが元のイメージに戻りません。
画像がクリックされた場合に元の画像を表示する必要があるため、ホバーの代わりに mouseover および mouseout イベントを使用する必要があります。
デモを確認してください: デモ リンク
メニューを作成し、mouseover (mouseenter) と mouseout(mouseleave) を使用しようとしましたが、残念ながらマウスを速く動かすと、一部のイベントが発生せず、ホバー イメージが元のイメージに戻りません。
画像がクリックされた場合に元の画像を表示する必要があるため、ホバーの代わりに mouseover および mouseout イベントを使用する必要があります。
デモを確認してください: デモ リンク
アイコンごとに 2 つの異なる画像要素を使用することは良い考えではないと思います。
アイコンごとに 1 つの要素を使用し、マウスオーバーとマウスアウトが発生したときにクラスとイメージ src を切り替える必要があります。
そのように(最小限の例):
$(".side_left").mouseover(function() {
$(this).prop("src", "http://www.spiritualawakeningradio.com/yaha.jpg");
}).mouseout(function(){
$(this).prop("src", "http://img.creativemark.co.uk/uploads/images/461/13461/smallImg.png");
});
作業フィドル: DEMO
これは、CSS スプライトを使用したより良い例です。JavaScript とほとんどのマークアップは不要で、一部の CSS のみが必要です。
.side_left {
width: 60px;
height: 60px;
background: url('http://i.imm.io/mvRL.png');
}
.side_left:hover {
background-position: 60px;
}
作業フィドル: DEMO
(e)
て、関数内の型を確認することができます。.
$('img.side_left').parent('div').on('mouseenter mouseleave click', function(e){
if(e.type === 'mouseenter' || e.type==='mouseleave'){
$(this).find('img:not(.active)').toggle();
}else{ // IS CLICK
$('img.active').toggle().removeClass('active');
$(this).find('img').addClass('active');
}
});
マウスをすばやく移動すると、.side_left_hover 要素がマウスの音を聞き始めるのに十分な時間が与えられません。
それで、どうやってそれを修正しますか?すべてのマウス リスナーを .side_left/.side_left_hover コンテナ div に配置します。これにより、コードがよりシンプルでクリーンになります。
これがフィドルです:http://jsfiddle.net/rJK3R/1/
最初の変更にホバーを使用してから、onclick でクラスまたは画像ソースを変更してみてください。
これは、非表示になったアイテムに対してマウス イベントを使用しているため発生しているため、十分に速く移動すると、マウスアウト イベントをトリガーするアイテムが存在しません。
元のコードを少し修正して機能させましたが、2 つのイメージ タグを破棄し、2 つのイメージ src 属性値または jQuery を使用する CSS を交換するか、純粋な CSS と :hover セレクターを使用することを検討する必要があります。
これを行うには、css を使用し、JavaScript ごとに css-classes を追加するだけです。
フィドルを更新して表示しました。これにより、必要な JavaScript コードが大幅に削減されます。私はあなたの既存のマークアップを保持しましたが、これはより少ないマークアップでも実行できると思います: