我有 2 个具有“绝对位置”的兄弟节点,它们都处理 mousedown 事件。当我单击“div 2”的透明区域(在图片上)时,如何触发“div 1”的处理程序。
问问题
3598 次
3 回答
4
如果重叠元素是动态的,我认为不可能使用常规事件冒泡来实现这一点,因为有问题的两个重叠元素是“兄弟姐妹”。
我遇到了同样的问题,我能够通过更多的 hitTest 场景来解决它,我可以在其中测试用户的鼠标位置是否在同一区域内。
function _isMouseOverMe(obj){
var t = obj.offset().top;
var o = obj.offset().left;
var w = obj.width();
var h = obj.height();
if (e.pageX >= o+1 && e.pageX <= o+w){
if (e.pageY >= t+1 && e.pageY <= t+h){
return true;
}
}
return false
}
于 2012-03-01T02:49:09.517 回答
0
您需要使用 3 个事件处理程序,一个用于 div1,一个用于 div2,一个用于 contentArea。contentArea 处理程序应停止传播,以便不调用 div2 处理程序。div2 处理程序应该调用 div1 处理程序:
function div1Click (e)
{
// do something
}
function div2Click (e)
{
div1Click.call(div1, e);
}
function contentAreaClick (e)
{
e = e || window.event;
if (e.stopPropagation) e.stopPropagation();
e.cancelBubble = true;
// do something
}
div1.onclick = div1Click;
div2.onclick = div2Click;
contentArea.onclick = contentAreaClick;
于 2011-10-18T17:34:29.310 回答
0
您正在寻找的是 CSS 的指针事件属性。我没有进行研究以了解在提出问题时它是否可用,但我面临同样的事情,我冒昧地报道它。
这是你的两个DIV:
<body>
<div class="inner div-1"></div>
<div class="inner div-2">
<div class="div-2__content-area"></div>
</div>
</body>
造型:
.inner {
height: 10em;
position: absolute;
width: 15em;
}
.div-1 {
/* Intrinsic styling & initial positioning, can be arbitrary */
background: #ff0;
left: 50%;
top: 50%;
transform: translate(-75%, -75%);
}
.div-2 {
/* Intrinsic styling & initial positioning, can be arbitrary */
background: rgba(0, 255, 0, 0.25);
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
/* Centering content area */
align-items: center;
display: flex;
justify-content: center;
/* Key feature -- making visible part of transparent DIV insensitive to mouse (pointer) events), letting them fire on the underlying element */
pointer-events: none;
}
.div-2__content-area {
/* Styling content area */
background: #f00;
height: 75%;
width: 75%;
/* Reverting 'pointer-events' perception to regular */
pointer-events: auto;
}
事件监听器和显示:
document.querySelector(".div-1").addEventListener("mousedown", (_) => {
alert("div 1");
});
document.querySelector(".div-2__content-area").addEventListener("mousedown", (_) => {
alert("Content area");
});
这一切都在codepen上:
于 2021-11-17T12:31:00.497 回答