jquery绝对定位元素单击

时间:2013-06-02 16:02:09

标签: javascript jquery css

我遇到了绝对定位div点击的问题。我正在开发一个带有jquery scrollpath的网站,并添加额外的图层以获得主要层中的视差效果和顶层覆盖按钮,它们无法点击,悬停等等。

Here是简单的例子:

<div class="body">
<div class="a"></div>
<div class="b">
    <div class="element first">First</div>
    <div class="element second">Second</div>
</div>
</div>

.body {
    position relative;
}
.a {
    position: absolute;
    left: 20px;
    top: 20px;
    width: 300px;
    height: 600px;
    background: rgba(0,0,0,0.5);
    z-index: 2;
}
.b {
    position: absolute;
    left: 40px;
    top: 40px;
    width: 260px;
    height: 300px;
    background: blue;
    z-index: 1;
}
.b .element {
    position: absolute;
    width: 50px;
    height: 50px;
    background: red;
}
.b .element.first {
    top: 50px;
    left: 50px;
}
.b .element.second {
    bottom: 50px;
    right: 50px;
}
}

我需要保持这个html结构并能够在z-index较低的绝对定位div中单击div。可能吗?

5 个答案:

答案 0 :(得分:8)

您可以在上部元素上将pointer-events设置为none,以阻止它对鼠标事件做出反应。

pointer-events:none;

JSFIDDLE http://jsfiddle.net/ugGgN/5/

如今,跨浏览器支持非常好:http://caniuse.com/#feat=pointer-events

有关指针事件的更多信息,请参阅文档:https://developer.mozilla.org/en/docs/Web/CSS/pointer-events?v=example

答案 1 :(得分:3)

如果您不需要跟踪上层的点击事件,那么您可以使用

实现此目的
pointer-events: none

在上层。

工作小提琴:http://jsfiddle.net/joycse06/ugGgN/6/

或者您也可以通过层转发点击事件来使其工作,因为浏览器不支持pointer-events: none {{1}}。请查看此链接http://www.vinylfox.com/forwarding-mouse-events-through-layers/

答案 2 :(得分:1)

css方式很好,但正如他们所说的那样,没有corss浏览器。无论如何,你可以在stackoverflow上找到答案here。你有两种方式,如果我是你,我会使用js method

编辑:根据您所遵循的js示例,我得到了this

$('.a').on( 'click', function( event ){
    var clickPos = [event.pageX, event.pageY];
    $('.element').each(function(){
        var t = $(this),
            elemPos = [t.offset().left, t.offset().top],
            elemSize = [t.width(), t.height()];

        if (
            clickPos[0] > elemPos[0] && clickPos[0] < elemPos[0] + elemSize[0]
            && clickPos[1] > elemPos[1] && clickPos[1] < elemPos[1] + elemSize[1]
        ) t.trigger( 'click' );
    });
});

答案 3 :(得分:1)

解决此问题的跨浏览器方法是使用z-index将其放置在父级上方的图层上。

答案 4 :(得分:0)

您可以添加“pointer-events:none;”到绝对定位元素的包含div。这样你就会点击元素。