2016-08-22 8 views
2

mouseentermouseleave関数を使用して、1つの画像(閉じたバッグ)を別の(開いたバッグ)に置き換えようとしています。なんらかの理由で、マウスを垂直にしたままで、水平にしないと機能しません。私はイメージの長さと関係があると思うが、私はそれを検査したが問題ではなかった。ここに私のコードは次のとおりです。mouseenter関数は垂直方向にのみ動作します

$("#tumi_front").mouseenter(function() { 
 
    $("#tumi_front").hide(); 
 
    $("#tumi_open").show(); 
 
}); 
 
$("#tumi_open").mouseleave(function() { 
 
    // alert('leave'); 
 
    $("#tumi_front").show(); 
 
    $("#tumi_open").hide(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<img id="tumi_front" src="tumi_front.png" alt="yolo front" height="40%" width="40%" /> 
 
<img id="tumi_open" src="tumi_open.png" alt="yolo open" height="30%" width="30%" " style="display: none " />

は助けを事前にありがとうございます!

+0

jsFiddleをデモンストレーションすることはできますか? – mrunion

+0

'tumi_open'を横にすると、' tumi_front'が短く表示されます。しかし、マウスは今 'tumi_front'の内部にあるので、それを隠します。 – Barmar

答えて

1

問題は、2つの異なる画像を異なる高さと幅に設定することです。あなたの正面の画像は40%で、もう1つは30%です。だから、あなたの小さな画像の外にホバリングしようとすると、大きな画像の上にホバーがトリガされ、次に画像が隠され、グリッチが発生します。このため

Your code (40% 30% broken)

より良い解決策は、あなたのイメージの両方に同じクラスを与え、画像を切り替えることであろう。これにより、異なるサイズの画像で発生しているホバーの問題が修正され、より効率的になります。

jQueryの

$(".double-img").on("mouseenter mouseleave", function() { 
    $(".double-img").toggle(); 
}); 

JSFiddle

My code (40% 30% fixed)

+0

私は分かりません。イメージのサイジングにはどのような違いがありますか? – Pappricot

+0

したがって、1つの画像が他の画像よりも小さいので、小さい画像の外にホバーすると、大きな画像の入力および終了イベントがトリガされ、画像がフラッシュされ、小さな画像に固執して表示されます。大きな画像は同じポイントにあり、オーバーフローしないので、上から接近すると機能します。 –

+0

徹底的な説明をありがとうございます。イメージサイジングをスタイルの中に入れました – Pappricot

0

なぜ1枚の画像(画像スプライト)を使用し、:hoverのCSSとbackground-positionをしません。 jqueryは必要ありません!

関連する問題