2013-07-17 181 views
0

我使用elementFromPoint来查找哪些元素将鼠标事件传递给它们,然后通过UI掩码捕获它们。我在mask中捕获事件,隐藏mask,然后使用elementFromPoint(event.pageX,event.pageY)获取底层元素。ElementFromPoint为绝对定位的元素?

问题是elementFromPoint对于绝对定位的元素似乎不起作用。它只是给出了第一个非绝对定位的父母。有没有一种方法来获得绝对和非绝对定位的元素,或者我只需要通过绝对定位的孩子进行手动搜索,一旦我得到父元素的elementFromPoint?

感谢

+1

elementFromPoint应该适用于绝对定位的元素。你能提供一个jsfiddle来重现你的问题吗? –

+0

哪个浏览器? –

+0

嗯,所以我只是做了一个jsfiddle,但一切工作就像我认为它应该。在我的代码中必须是无关的错误:S感谢您的帮助。 – Andrew

回答

0

我尝试和创造了工作精绝have a look

HTML

<div id="one">1</div> 
<div id="two">2</div> 
<div id="three">3</div> 
<div id="four">4</div> 
<div id="five">5</div> 
<div id="six">6</div> 

CSS代码

div { 
    width: 50px; 
    height: 50px; 
    background-color: black; 
    color: white; 
    margin-bottom: 30px; 
} 
#five{ 
    position: absolute; 
    left: 10px; 
    top: 20px; 
    background: red; 
} 

JS

$(document).ready(function(){   
    $(document.body).bind('click', function(e){ 
     var elem = document.elementFromPoint(e.pageX, e.pageY); 

     alert('you selected element id: ' + elem.id); 
    }); 
}); 
1

我的经验是普通的旧document.elementFromPoint(...)适用于绝对定位的元素太多,它的元素的“命令”(该元素是真的“前面”)敏感。我发现有时为了让它按照我想要的方式工作,我必须明确指定绝对定位元素上的CSS“z-index”(有时具有10或更多的正值)。

如果元素没有背景并且只包含文本,那么这是一个特别的问题,因为它们都将在相同的位置同时显示。从外观上看,很难判断哪一个真的“在前面”,或许不是你想象的那个。