この質問はやや関連しているようです
しかし、まだ完全ではありません。これが重要です。私は小さなギャラリーを書いていて、ある時点でユーザーがサムネイルをクリックします。画像の大きいバージョンは、フルスクリーンの内部として表示されます。ここまでは順調ですね。マウスをその上に置くと、3つの画像が表示されます。閉じる、左、右、アルバム内を移動するためのものです。マウスが画像またはナビゲーション画像を離れると、3つのナビゲーション画像がフェードします。
これらの3つのナビゲーション画像は、メイン画像と部分的に重なっています。たとえば、閉じる画像は左上隅の円です。そして、それはトリッキーな部分です。
マウスがメイン画像から横に移動するか、メイン画像から3つの小さな重なり合う画像のいずれかに移動するたびに、mouseleaveがトリガーされます。mouseenterは、期待どおりに重なり合う小さな画像ごとにトリガーします。
ただし、これによりファンキーな点滅効果が作成されます。これは、メイン画像のマウスリーブ時に3つの小さな画像をhide()するためです。これにより、オーバーラップし、マウスがメイン画像の上にあるため、メイン画像のmouseenterがすぐにトリガーされます。
これを回避するために、メイン画像をマウスで離れたときに、マウスが重なり合っている小さな画像の1つに移動したかどうかを確認しようとしました。そのために、私はこのコードを使用しました:
main_img.mouseleave(function() {
if (!hoverButtons()) {
doHideButtons();
}
});
function hoverButtons() {
return (close_img.is(":hover")) || (left_img.is(":hover")) || (right_img.is(":hover"));
}
これはSafariとChromeでうまく機能しますが、画像がまだ点滅しているFFとIEでは機能しません。投稿をさらにいじくり回すと、「:hover」は適切なセレクター式ではなく、CSS疑似クラスであるため、ここで問題になっているようです。
さまざまな画像をマウス入力/マウスリーブするときにオン/オフを切り替えるスイッチを操作しようとしましたが、イベントが異なる順序でトリガーされるように見えるため、どちらも機能しません。
どうすればこれを行うことができますか?ありがとう!
編集:明確にする必要があるかもしれません:ナビゲーションボタンが表示される前に、メイン画像の位置に応じて配置するために、それぞれの左属性と上属性を設定します。つまり、jQueryセレクターで.show()を呼び出す前に、いくつかの作業を行う必要があります。新しい関数.placeShow()を追加しようとしましたが、$( "。nav-button:hidden")。placeShow()のようなセレクターに関してはうまくいきませんでした。