5

我对绝对定位的 div 的点击有疑问。我正在开发一个带有 jquery 滚动路径的网站,并添加了额外的层来获得视差效果,顶层覆盖了主层中的按钮,它们不能被点击、悬停等。

是一个简单的例子:

<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 的能力。可能吗?

4

5 回答 5

8

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

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

于 2013-06-02T16:10:07.160 回答
3

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

pointer-events: none

在上层。

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

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

于 2013-06-02T16:10:31.993 回答
1

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

编辑:根据你所拥有的,我遵循了 js 示例,我得到了这个

$('.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' );
    });
});
于 2013-06-02T16:26:09.630 回答
1

解决此问题的跨浏览器方法是将z-index其定位在父级之上的层上。

于 2015-09-30T05:31:09.077 回答
0

您可以添加“指针事件:无;” 到绝对定位元素的包含 div。这样,您将单击元素。

于 2013-06-02T16:10:45.337 回答