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 相关文章推荐
jquery trim() 功能源代码
Feb 14 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
JavaScript 学习笔记之操作符
Jan 14 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
May 03 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
仿百度换肤功能的简单实例代码
Jul 11 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
Jan 21 Javascript
JavaScript中document.referrer的用法详解
Jul 04 Javascript
Javascript中从学习bind到实现bind的过程
Jan 05 Javascript
angularjs 缓存的使用详解
Mar 19 Javascript
js实现旋转的星空效果
Nov 01 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
Dec 10 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
PHP自定义函数收代码
2010/08/01 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
2016/09/27 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
js module大战
2019/04/19 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
Python3进制之间的转换代码实例
2019/08/24 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
英文商务邀请信
2014/01/22 职场文书
横幅标语大全
2014/06/17 职场文书
餐饮食品安全责任书
2015/01/29 职场文书
导游词400字
2015/02/13 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js