2012-10-11 6 views
8

可能性の重複:
How to get a list of all elements that resides at the clicked point?Javascript/jquery、(x、y)のすべてのdivの位置を取得します。転送の接触?

私はdocument.elementFromPoint(x,y)を使用して、最高のzインデックスを持つ要素を取得することができます知っています。

問題は、タッチイベントの場所を含むすべてのdivを取得する必要があることです。

どのようにタッチを下の要素に伝播できますか?私は、次の...

をCSSで再生成するイベント、またはポインタ・イベントのスタイルながら、しかし、私はこれらを使用することはできませんし、彼らがちらつき可能性があり、/非表示の要素を示し、いくつかのハックのソリューションを見てきました

図は、私が何をする必要があるかを示しています。

、紫、緑、青のボックスはdiv要素を表し、赤い点がタッチ位置であれば、私は、」DIV3を返す関数が必要div2、div1 "とする。

+0

私は[プラグイン]を持っているが(http://jsfiddle.net/SpYk3/2FZVW/)私が作りましたカーソルはそれと似ています。私は、同じ原則が変数に触れることに適用できると確信していますが、仕事では、私は自分のフィドルを利用することもできず、私の古い未採掘のコードははるかに少ないので、私は今日家に帰って、あなたと一緒に迎えに来る。今のところ、私は自分のプラグインへのリンクを含んでいます。そしておそらくあなたはその "箱"に必要なものを見つけることができます。 g'luck! – SpYk3HH

+0

これは、カーソルの下にあるすべての要素を返す関数を持っています。それは私が使って以来、しばらくしていましたので、私の頭の上からどれが正しいかを教えてくれます。 SO答え](http://stackoverflow.com/questions/1843674/how-to-change-cursor-from-pointer-to-finger-using-jquery/10353324#10353324)) – SpYk3HH

+1

あなたは一瞬心配するべきではありません関数が終了するまでブラウザは再描画しないため、要素を隠しています。 – Shmiddty

答えて

19

このコードではありませんちらつき:

$("body").click(function(e){ 
    var x = e.pageX, y = e.pageY; 
    var res = []; 

    var ele = document.elementFromPoint(x,y); 
    while(ele && ele.tagName != "BODY" && ele.tagName != "HTML"){ 
     res.push(ele); 
     ele.style.display = "none"; 
     ele = document.elementFromPoint(x,y); 
    } 

    for(var i = 0; i < res.length; i++){ 
     res[i].style.display = ""; 
    } 
    console.log(res); 
});​ 
+0

私はブラウザが再描画されないことを知らなかった..助けてくれてありがとう:) –

+0

このメソッドは、まだdisplay =ブロックを持っていない要素では機能しません。これにより、レイアウトが分割されます。 – qodeninja

+0

はい、他の表示タイプがある場合はそれに応じてスタイルをリセットできます。幸いにも私はこれを使用ブロックに必要な要素。 –

2

どうやっについて:

$(document).click(function(e) { 
    var pageX = e.pageX; 
    var pageY = e.pageY; 
    $('*').each(function(index) { 
     var offset = $(this).offset(); 
     var left = offset.left; 
     var right = offset.right; 
     var width = $(this).width(); 
     var height = $(this).height(); 
     if(pageX > left && pageX < left + width) { 
      if(pageY > top && pageY < top + height) { 
        //Handle the div 
      } 
     } 
    }); 
}); 
関連する問題