我遇到了绝对定位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。可能吗?
答案 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。这样你就会点击元素。