javascript 兼容FF的onmouseenter和onmouseleave


<script>
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;
}
};

</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值