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
posted @ 2014-03-28 15:28  丨丶灬断章 ← |  阅读(401)  评论(0)    收藏  举报