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实现关联数据(Linked Data)查询及注意细节
Feb 22 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
Nov 28 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
Dec 17 Javascript
javascript将异步校验表单改写为同步表单
Jan 27 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
js如何改变文章的字体大小
Jan 08 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
Mar 22 Javascript
js重写方法的简单实现
Jul 10 Javascript
AngularJS 依赖注入详解和简单实例
Jul 28 Javascript
微信小程序 Record API详解及实例代码
Sep 30 Javascript
JS实现电商放大镜效果
Aug 24 Javascript
vue移动端实现红包雨效果
Jun 23 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
PHP6 mysql连接方式说明
2009/02/09 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
理解javascript封装
2016/02/23 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
mac系统安装Python3初体验
2018/01/02 Python
Python File readlines() 使用方法
2018/03/19 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
Python chardet库识别编码原理解析
2020/02/18 Python
Python datetime模块使用方法小结
2020/06/18 Python
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
世界上最好的足球商店:Unisport
2019/03/02 全球购物
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
生产助理岗位职责
2014/06/18 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
投标邀请书范本
2015/02/02 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
国庆节主题班会
2015/08/15 职场文书
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers