2012-03-08 7 views
0

他の要素の下に配置されている要素のマウスイベントをキャッチしたいと思います。ここでオーバーレイ/カバー/スタックされた要素のJavascriptマウスイベント

は、私が持っているものの一例である:http://jsfiddle.net/KVLkp/13/

は今、何をしたいマウスが赤い四角の上にあるときに青い四角が黄色の境界線を持っていることです。

重要なものは以下のとおりです。

  • 彼らはイメージです。したがって、他の要素に の要素を埋め込む方法はありません。
  • これは簡単な例ですが、実際には多くの画像があります。だから、座標計算によってホバー要素の 検索が私の 溶液(私はすでに、この答えを見つけた)
  • マウスがそれらの上にあることを、すべての

感謝を除く二つの画像間のリンクはありませんされていませんあなたは、あなたの助け

編集: は、私は私の一般的な例より完全な例を書いた: - DOM内のimg順序が固定されておらず、ライブ に変更することができます - 上部と下部の画像は、さまざまなサイズと位置を持っています

皆様おかげさまで!

+0

妥当な回避策を予想していたのを見て、私はあなたの要求が本当に実現できるかどうか確信していません。ホバーは、任意に位置を特定するのではなく、DOMに似ています。あなたはあなたの前提について絶対に確信していますか?たとえば、ある画像を別の画像に埋め込むことはできませんが、*画像は*画像にする必要がありますか?背景画像を持つ 'DIV'要素だけでもよいでしょうか? –

+0

http://jsfiddle.net/KVLkp/17/(おそらく「2つの画像間のリンクなし」の基準には合致しないかもしれませんが)うまくいくような方法があります。 – nnnnnn

+0

@DavidHedlund複数の画像が(非常に)ランダムな位置、さまざまなサイズで表示され、domをオーバーフローさせたくないために画像が必要です(私の現実は4000画像を持つことができます) – Guile

答えて

1

次の線に沿って何かを試みることができる:

<style> 
img.hover { 
    border-color : yellow; 
}​ 
</style> 
<script> 
$('img').mouseenter(function() { 
    $(this).addClass("hover"); 
}).mouseleave(function (e) { 
    var next = e.relatedTarget; 
    if (next.tagName.toUpperCase()!="IMG" 
       || $(next).hasClass("hover")) 
     $(this).removeClass("hover"); 
}); 
</script> 

直接ではなく、境界線の色を設定し、私ができるように、私は、色を設定し、「ホバー」と呼ばれるクラスを定義しました与えられた要素がどこにでも色をハードコードしないで境界線を持っているかどうかを簡単にテストしてから、event.relatedTargetプロパティを使ってマウスがどこに残っているかを確認しました。

"ホバー"クラスは、マウスが移動しようとしている要素がイメージでないか、既にホバークラスを持つイメージである場合にのみ削除されます。このデモではかなりうまくいくようです:http://jsfiddle.net/KVLkp/18/しかし、2つの画像が隙間なく並べてある場合や、上の画像が完全に "含まれていない"場合(座標の意味で)は動作しません。 imgが重なっている - デモでevent.relatedTargetがあなたの実際の状況に合ったものを考え出すのに十分であることを願っているので、私は先に進んで投稿することを決めました。

(注:「ホバー」はすでに:hover疑似クラスを持つクラス指定したCSSに悪い名前ですが、私は私がここにフィドルでそれを変更し、気にすることができませんでした思い出した時点で)

+0

本当に手に入れました!私はrelatedTargetが私の神秘的な方法だと思う!ありがとうございました!私は新しい事例でそれを試しました(あなたはそれを知ることができませんでした)。まだまだバグのあるものがありますが、私はそれを処理することができます!ありがとうございました! http://jsfiddle.net/KVLkp/20/ – Guile

+0

ようこそ。私の言ったように、私のコードがそのまま動作しないケースがあるにもかかわらず、正しい軌道に乗ることを願っています。 (申し訳ありません、私は今夜それを見る時間がありません。) – nnnnnn

+0

私はこの答えを受け入れます。しかし、私はrelatedTargetがマウスをちょうど残したターゲット要素であるとは見ませんでした。そして、これは私が欲しいものではありません。どうもありがとうございました! – Guile

0

私はあなたがしなければならないものよりも複雑なものだと思います。あなたのイベントを内側の四角形と外側の四角形に単純に入れておきますが、 "this"を使用しないでください。 $( '#bluesqure')、ちょうどホバーが青い四角にあるかのように作業してください。

実際のシナリオではこれが解決策になるかどうかわかりません。

+0

マウスが赤い四角形の上にあるとき、どの青い四角形を扱うべきかわからないので、これはできません。私は100の赤い四角形と100の青色のランダムな座標を持つことを意味します。 – Guile

+0

nnnnnnのように見えます。 – John

関連する問題