当前位置: 首页 > 图文教程 > 网络编程 > Javascript > javascript 兼容FF的onmouseenter和onmouseleave的代码

Javascript
jquery 操作单选框,复选框,下拉列表实现代码
js 数组实现一个类似ruby的迭代器
JavaScript 组件之旅(一)分析和设计
JavaScript 组件之旅(二)编码实现和算法
JavaScript 组件之旅(三):用 Ant 构建组件
JavaScript 组件之旅(四):测试 JavaScript 组件
小议javascript 设计模式 推荐
浅谈javascript 面向对象编程
javascript 时间比较实现代码
js apply/call/caller/callee/bind使用方法与区别分析
JavaScript 全角转半角部分
jquery 选择器部分整理
Firebug 字幕文件JSON地址获取代码
jQuery 判断元素上是否绑定了事件
javascript实现的距离现在多长时间后的一个格式化的日期
javascript 面向对象,实现namespace,class,继承,重载
javascript 通过封装div方式弹出div窗体
JScript 脚本实现文件下载 一般用于下载木马
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
网页禁用右键实现代码(JavaScript代码)

Javascript 中的 javascript 兼容FF的onmouseenter和onmouseleave的代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 75 ::
收藏到网摘: n/a

经过测试发现,例子1 在 ff下抖动的厉害,ie下稍微有点。 具体原因 其实就是 mouseout 的冒泡机制 引起的。
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