>  기사  >  웹 프론트엔드  >  FF의 onmouseenter 및 onmouseleave_javascript 기술과 호환되는 javascript 코드

FF의 onmouseenter 및 onmouseleave_javascript 기술과 호환되는 javascript 코드

WBOY
WBOY원래의
2016-05-16 19:02:351054검색

IE에는 이 문제를 해결하기 위한 onmouseenter 및 onmousleave가 있습니다.
ff가 없어서 아쉽네요. 다시 생각해보니 왜 이렇게 좋은 함수가 ff에 인용되지 않는 걸까?
ie에도 onpropertychange가 있는데 ff에는 없습니다. . .

FF의 onmouseenter 및 onmouseleave와 호환되도록 비교 예에 js 조각이 도입되었습니다.:
코드 복사 코드는 다음과 같습니다.

var xb =
{
    evtHash: [],

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

    addEvent: function(_elem, _evtName, _fn, _useCapture)
    {
        if (typeof _elem.addEventListener != '정의되지 않음')
        {
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 != '정의되지 않음')
        {
            var key = '{FNKEY::obj_'   xb.ieGetUniqueID(_elem)  '::evt_'   _evt이름 '::fn_'   _fn   '}';
            var f = xb.evtHash[key];
            if (typeof f != '정의되지 않음')
               { return; }

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

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

           // 창에 언로드 이벤트를 연결하여 IE 메모리 누수를 정리할 수 있음
           window.attachEvent('onunload', function()
            {            _elem.detachEvent('on'   _evtName , f)
            });

            키 = null;
            //f = null;   /* 이 내용을 무효화하지 마세요. 그렇지 않으면 분리할 수 없습니다.*/
        }
        그렇지 않으면
          { _elem['on'  _evtName] = _fn; }
    },    

    removeEvent: function(_elem, _evtName, _fn, _useCapture)
    {
        if (typeof _elem.removeEventListener != '정의되지 않음'
          { _ele m.removeEventListener(_evtName, _fn, _useCapture); }
        else if (typeof _elem.detachEvent != '정의되지 않음')
        {
           var key = '{FNKEY::obj_'   xb.ieGetUniqueID(_elem)   '::evt'  _evtName   '::fn_ '   _fn   '}';
            var f = xb.evtHash[key];
            if (typeof f != '정의되지 않음')
            {
               _elem.detachEvent('on'   _evtName, f);
                삭제 xb.evtHash[key];
            }

            키 = null;
            //f = null;   /* 이 항목을 null로 설정하지 마세요. 그렇지 않으면 분리할 수 없습니다.*/
        }
    },

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

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

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

        동안에 (_child && _child != _parent)
            { _child = _child.parentNode; }

        반환 _child == _parent;
    }    
};
本篇文章来源于 cssrain.cn 원문链接:http://www.cssrain.cn/article.asp?id=952
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.