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 相关文章推荐
JavaScript 异步调用框架 (Part 6 - 实例 & 模式)
Aug 04 Javascript
有关于eclipse配置spket需要注意的一些地方
Apr 07 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
Oct 21 Javascript
js arguments,jcallee caller用法总结
Nov 30 Javascript
关于js内存泄露的一个好例子
Dec 09 Javascript
Google Maps API地图应用示例分享
Oct 23 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
Jan 26 Javascript
JS函数定义方式的区别介绍
Mar 22 Javascript
js内置对象处理_打印学生成绩单的简单实现
Sep 24 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
详解利用eventemitter2实现Vue组件通信
Nov 04 Javascript
详解vue或uni-app的跨域问题解决方案
Feb 21 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和XSL stylesheets转换XML文档
2006/10/09 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php生成扇形比例图实例
2013/11/06 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
详解PHP中的Traits
2015/07/29 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
php和html的区别点详细总结
2019/09/24 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python字符串处理实现单词反转
2017/06/14 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
windows下python和pip安装教程
2018/05/25 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
Python运行异常管理解决方案
2020/03/09 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
用html5实现语音搜索框的方法
2014/03/18 HTML / CSS
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
电大毕业自我鉴定
2014/02/03 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
大班开学家长寄语
2014/04/04 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
医德医风自我评价
2014/09/19 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
廉政承诺书
2015/01/19 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
Spring整合Mybatis的全过程
2021/06/28 Java/Android