8

可能重复:
如何获取位于单击点的所有元素的列表?

我知道我可以通过使用document.elementFromPoint(x,y).

问题是我需要获取包含触摸事件位置的每个 div。

如何将触摸传播到下面的元素?

我已经看到了一些 hacky 解决方案,它们在重新生成事件时显示/隐藏元素,或者使用 css 的指针事件样式,但是我不能使用这些,它们可能会导致闪烁......

下图说明了我需要做的事情:

如果紫色、绿色和蓝色框代表 div 元素,而红点是触摸位置,我需要一个返回“div3, div2, div1”的函数。

4

2 回答 2

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);
});​
于 2012-10-11T20:32:07.917 回答
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
             }
        }
    });
});
于 2012-10-11T20:23:14.077 回答