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 相关文章推荐
代码生成器 document.write()
Apr 15 Javascript
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
Sep 19 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
Feb 22 Javascript
js去字符串前后空格5种实现方法及比较
Apr 03 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
May 07 Javascript
原生js模拟淘宝购物车项目实战
Nov 18 Javascript
基于jQuery实现左右图片轮播(原理通用)
Dec 24 Javascript
基于javascript实现文字无缝滚动效果
Mar 22 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
Jan 08 Javascript
微信小程序实现笑脸评分功能
Nov 03 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
May 05 Javascript
通过angular CDK实现页面元素拖放的步骤详解
Jul 01 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
支持oicq头像的留言簿(二)
2006/10/09 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
php 文件上传类代码
2011/08/06 PHP
php发送post请求的三种方法
2014/02/11 PHP
ArrayList类(增强版)
2007/04/04 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
JS实现保留n位小数的四舍五入问题示例
2016/08/03 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
Python制作简单的网页爬虫
2015/11/22 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
python执行精确的小数计算方法
2019/01/21 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
如何对python的字典进行排序
2020/06/19 Python
pycharm永久激活超详细教程
2020/10/29 Python
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
Python的两道面试题
2013/06/29 面试题
大学生简历的个人自我评价
2013/12/04 职场文书
运动会广播稿100字
2014/01/11 职场文书
党委书记群众路线对照检查材料思想汇报
2014/10/04 职场文书
死亡证明书样本说明
2014/10/18 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python
python 中yaml文件用法大全
2021/07/04 Python