javascript 兼容FF的onmouseenter和onmouseleave的代码


Posted in Javascript onJuly 19, 2008

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
Javascript 相关文章推荐
js中判断文本框是否为空的两种方法
Jul 31 Javascript
jquery简单的拖动效果实现原理及示例
Jul 26 Javascript
如何解决Jquery库及其他库之间的$命名冲突
Sep 15 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
Nov 14 Javascript
javascript实现textarea中tab键的缩排处理方法
Jun 26 Javascript
JS实现灵巧的下拉导航效果代码
Aug 25 Javascript
jQuery数据类型小结(14个)
Jan 08 Javascript
手写简单的jQuery雪花飘落效果实例
Apr 22 jQuery
详解使用VueJS开发项目中的兼容问题
Aug 02 Javascript
小程序如何写动态标签的实现方法
Feb 05 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
Apr 27 Javascript
vuex存取值和映射函数使用说明
Jul 24 Javascript
javascript 获取网页参数系统
Jul 19 #Javascript
javascript import css实例代码
Jul 18 #Javascript
番茄的表单验证类代码修改版
Jul 18 #Javascript
神奇的代码 通杀各种网站-可随意修改复制页面内容
Jul 17 #Javascript
js 新浪的一个图片播放图片轮换效果代码
Jul 15 #Javascript
纯js实现的论坛常用的运行代码的效果
Jul 15 #Javascript
点图片上一页下一页翻页效果
Jul 09 #Javascript
You might like
学习PHP Cookie处理函数
2016/08/09 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
php中请求url的五种方法总结
2017/07/13 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
JQuery动画与特效实例分析
2015/02/02 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
基于Django用户认证系统详解
2018/02/21 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
商务考察邀请函范文
2014/01/21 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
拆迁委托协议书
2014/09/15 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
党员转正意见怎么写
2015/06/03 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
Java 写一个简单的图书管理系统
2022/04/26 Java/Android
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript