Welcome 微信登录

首页 / 脚本样式 / JavaScript / javascript 兼容FF的onmouseenter和onmouseleave的代码


IE下有 onmouseenter和onmouseleave来解决。
可惜ff就没有。  我再想 , 为什么这么好的功能,为什么ff不引用呢?
还有ie中的onpropertychange  ,哎,ff中都没有。。。

对比例子中引入了一段js ,来兼容FF的onmouseenter和onmouseleave. :
复制代码 代码如下:
var xb =
{
    evtHash: [],

    ieGetUniqueID: function(_elem)
    {
        if (_elem === window) { return "theWindow"; }
        else if (_elem === document) { return "theDocument"; }
        else { return _elem.uniqueID; }
    },

    addEvent: function(_elem, _evtName, _fn, _useCapture)
    {
        if (typeof _elem.addEventListener != "undefined")
        {
            if (_evtName == "mouseenter")
                { _elem.addEventListener("mouseover", xb.mouseEnter(_fn), _useCapture); }
            else if (_evtName == "mouseleave")
                { _elem.addEventListener("mouseout", xb.mouseEnter(_fn), _useCapture); } 
            else
                { _elem.addEventListener(_evtName, _fn, _useCapture); }
        }
        else if (typeof _elem.attachEvent != "undefined")
        {
            var key = "{FNKEY::obj_" + xb.ieGetUniqueID(_elem) + "::evt_" + _evtName + "::fn_" + _fn + "}";
            var f = xb.evtHash[key];
            if (typeof f != "undefined")
                { return; }

            f = function()
            {
                _fn.call(_elem);
            };

            xb.evtHash[key] = f;
            _elem.attachEvent("on" + _evtName, f);

            // attach unload event to the window to clean up possibly IE memory leaks
            window.attachEvent("onunload", function()
            {
                _elem.detachEvent("on" + _evtName, f);
            });

            key = null;
            //f = null;   /* DON"T null this out, or we won"t be able to detach it */
        }
        else
            { _elem["on" + _evtName] = _fn; }
    },    

    removeEvent: function(_elem, _evtName, _fn, _useCapture)
    {
        if (typeof _elem.removeEventListener != "undefined")
            { _elem.removeEventListener(_evtName, _fn, _useCapture); }
        else if (typeof _elem.detachEvent != "undefined")
        {
            var key = "{FNKEY::obj_" + xb.ieGetUniqueID(_elem) + "::evt" + _evtName + "::fn_" + _fn + "}";
            var f = xb.evtHash[key];
            if (typeof f != "undefined")
            {
                _elem.detachEvent("on" + _evtName, f);
                delete xb.evtHash[key];
            }

            key = null;
            //f = null;   /* DON"T null this out, or we won"t be able to detach it */
        }
    },

    mouseEnter: function(_pFn)
    {
        return function(_evt)
        {
            var relTarget = _evt.relatedTarget;                
            if (this == relTarget || xb.isAChildOf(this, relTarget))
                { return; }

            _pFn.call(this, _evt);
        }
    },

    isAChildOf: function(_parent, _child)
    {
        if (_parent == _child) { return false };

        while (_child && _child != _parent)
            { _child = _child.parentNode; }

        return _child == _parent;
    }    
};
本篇文章来源于 cssrain.cn 原文链接:http://www.cssrain.cn/article.asp?id=952