2011-03-09 17 views
6

Bu piksel belge yüklendiğinde görünür belgenin dışında bulunuyorsa null neden document.elementFromPoint(500,1000)here döndü?document.elementFromPoint görünür belgenin dışındaki öğeler için null değerini döndürüyor

Görünür belgenin dışında ve görünümüne kaydırıldıktan sonra, başlangıçta document.elementFromPoint null değerini döndürdüğünü fark ettim. (Sayfa yüksekliği 1000'den az piksele daralmış emin)

(- -> komut> 'ifadelerini seyretmek' ctrl-shift-i)

Bunu test etmenin basit bir yolu Chrome'da olduğu DÜZENLEME: yüzden docs

  1. her zaman görünür alanı dışında noktaları için null döndürür uyarınca, makul mü
  2. x ve y görünür ekranın sol ve sağ üst göredir

Ben

cevap

2

Bu pencerenin dışındaki bir noktaya belirtirken hiçbir unsur döndüren mantıklı hem varsayımlara başarısız oldu. Bu noktada görünür olan öğeleri döndürür, pencerenin farklı bir boyutta olması durumunda görünür olabilecek öğelerin değil. Pencerenin boyutunun değiştirilmesinin, öğelerin hareket etmesine neden olabileceğini düşünün. Bu nedenle, o noktada görüntülenebilecek döndürme öğeleri varsa tutarlı bir yanıt almazsınız.

Pencerede içeriği nasıl kaydırdığınıza bakılmaksızın, pencerenin dışındaki bir nokta pencerenin dışında kalır.

+0

o noktadan ilerlediğinizde neden return null vermez:

document.elementFromPoint(X - window.pageXOffset, Y - window.pageYOffset); 

Veya bir olayı dinleyen eğer olacağını:

Aşağıdaki kod benim için çalıştım görünür hale getiriliyor? – Joel

+0

Mozilla docs'a göre, görünen sınırlar dışına çıktığında null döndürmeli, hala görüntülendiğinde null olarak niye döndüğünü anlamıyorum. https://developer.mozilla.org/en/DOM/document.elementFromPoint – Joel

38

Bu nedenle kendi sorunuzu cevapladınız: document.elementFromPoint, belge yerine görünümün koordinatında çalışır. Yani tek yapmanız gereken bir kaydırma telafisi eklemektir. Böylece

document.elementFromPoint(e.pageX - window.pageXOffset, e.pageY - window.pageYOffset); 
+5

Sadece +100'ü kabul edebilirsem. Teşekkürler dostum. –

+0

Bunu Google'da buldum! Tam olarak ne aradığımı bu! Çok teşekkürler: D –

+0

Teşekkür ederiz Anton! Gününü kurtardınız :) – chriscrossweb

İlgili konular