onmouseover多次触发(非冒泡)
mouseover在特定情况下除冒泡之外会多次触发
可以利用事件下Event对象方式判断
方法如下
function contains(parentNode, childNode) {
// 用于检查一个对象是否包含在另外一个对象中的方法,contains方法。MSIE和FireFox分别提供了检查的方法
if (parentNode.contains) {
return parentNode != childNode && parentNode.contains(childNode);
} else {
return !!(parentNode.compareDocumentPosition(childNode) & 16);
}
// 用于检查一个对象是否被包含在我们的触发对象里面
};
function checkHover(e,target){
// 用于检查鼠标是否真正从外部移入或者移出对象的函数 @checkHover,这个函数需要传入当前的事件对象和目标对象
if (getEvent(e).type=="mouseover") {
return !contains(target,getEvent(e).relatedTarget||getEvent(e).fromElement) && !((getEvent(e).relatedTarget||getEvent(e).fromElement)===target);
} else {
return !contains(target,getEvent(e).relatedTarget||getEvent(e).toElement) && !((getEvent(e).relatedTarget||getEvent(e).toElement)===target);
}
};
function getEvent(e){
return e||window.event;
};
checkHover(e,this) // 对比是不是this true or false
浙公网安备 33010602011771号