给一个元素绑定了mouseout事件,当鼠标离开这个元素的子元素的时候就会触发这个事件,并且鼠标由父元素进入子元素时也会触发父元素的mouseout事件。
用jQuery的mouseleave事件就可以实现想要的功能,如果不使用jQuery的话可以用停止事件冒泡和判断ralatedTarget来实现,示意代码如下:
//判断是否为包含关系,为IE和DOM做了兼容处理
function contains(parentNode, childNode) {
return parentNode.contains ? parentNode != childNode && parentNode.contains(childNode) :
!! (parentNode.compareDocumentPosition(childNode) & 16);
}
//事件绑定没有做IE兼容
document.getElementById("out").addEventListener('mouseout', function(Event) {
if (contains(this, event.relatedTarget)) {} else {
alert("out");
}
}, false);
document.getElementById("in").addEventListener("mouseout", function(event) {
event.stopPropagation();
console.log("#in mouseout");
}, false);