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