2012-10-11 9 views
8

Olası Çoğalt:
How to get a list of all elements that resides at the clicked point?Javascript/jquery, tüm divs konumlarını (x, y) olarak alın. Yönlendirme dokunuyor mu?

ben document.elementFromPoint(x,y) kullanarak en yüksek z-endeksine sahip eleman alabilirsiniz biliyorum.

Sorun, dokunmatik olayın yerini içeren her div almam gerekiyor.

Altındaki öğelere dokunmaları nasıl iletebilirim?

aşağıdaki ancak ben bu kullanamaz ve onlar titreyen neden olabilir, olayı yeniden üretirken/gizleme elemanları veya css ile işaretçi-olaylar tarzını gösteren bazı hacky çözümler gördük

... , mor, yeşil ve mavi kutular div öğelerini temsil eder ve kırmızı nokta dokunmatik konum ise

, ben "DIV3 dönecekti bir işlevi gerekir: diyagramı yapmam gerekenleri göstermektedir div2, div1 ".

+0

Ben [eklentisi] var (http://jsfiddle.net/SpYk3/2FZVW/) yaptığım bir geri iken imleci ile benzer bir şey yapar. Ben aynı prensibin dokunma değişkenine uygulanabileceğine eminim, ancak işte burada, kemanımı bile kullanamıyorum, daha az eski madeni olmayan kodumu görüyorum, bu sorunu hatırlamaya çalışacağım bugün eve gelip seninle dalga geçiyorum. Şimdilik, eklentime bir link ekledim ve belki de bu "kutuda" ne ihtiyacınız olduğunu bulabilirsin. g'luck! – SpYk3HH

+0

İçinde imlecin altındaki tüm öğeleri döndürecek bir işlevi var, ben onu kullandığımdan beri bir süre geçti, bu yüzden kafamın üstünden hangisinin tam olarak olduğunu söyleyemem ([daha fazla eklenti kullanımı bu örnekte bulundu) SO cevap] (http://stackoverflow.com/questions/1843674/how-to-change-cursor-from-pointer-to-finger-using-jquery/10353324#10353324)) – SpYk3HH

+1

Anlık endişelenmemelisiniz Elemanların gizlenmesi, tarayıcı işlevler bitene kadar yeniden çizilmeyeceğinden. – Shmiddty

cevap

19

bu kodla Titreşimsiz:

$("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

Tarayıcının yeniden çizilmesinin mümkün olmadığını biliyordum .. yardım için teşekkürler :) –

+0

Bu yöntem, zaten display = block değerine sahip olmayan elemanlar üzerinde çalışmıyor. Bu düzeni kırar. – qodeninja

+0

Evet, ancak diğer görüntü türlerim varsa stilleri buna göre sıfırlayabilirim. Neyse ki kullanmam için gereken bloklar. –

2

Ne yapmayı:

$(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 
      } 
     } 
    }); 
}); 
İlgili konular