慕斯。兄弟姐妹事件的传播。
-
26-10-2019 - |
题
我有2个兄弟姐妹节点,其中都有“绝对位置”,这两者都处理了Mousedown事件。当我单击“ Div 2”的透明区域时,如何触发“ Div 1”的处理程序(在图片上)。
解决方案
如果重叠的元素是动态的,我不认为可以使用常规事件冒泡来实现此操作,因为所讨论的两个重叠元素是“兄弟姐妹”。
我遇到了同样的问题,并且能够通过更多的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
}
其他提示
您需要使用3个事件处理程序,一个用于DIV1,一个用于DIV2,另一个用于Contectarea。 Contectarea处理程序应停止繁殖,以便不调用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;
不隶属于 StackOverflow