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 当前日期转化为中文的实现代码
May 13 Javascript
javascript与CSS复习(《精通javascript》)
Jun 29 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
Feb 16 Javascript
3种不同方式的焦点图轮播特效分享
Oct 30 Javascript
JQuery调用绑定click事件的3种写法
Mar 28 Javascript
js兼容火狐获取图片宽和高的方法
May 21 Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
Nov 17 Javascript
AngularJS ng-controller 指令简单实例
Aug 01 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
Mar 13 Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 Javascript
layui表格checkbox选择全选样式及功能的实例
Mar 07 Javascript
javascript的hashCode函数实现代码小结
Aug 11 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
轻松修复Discuz!数据库
2008/05/03 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
帝国cms目录结构分享
2015/07/06 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
python如何实现excel数据添加到mongodb
2015/07/30 Python
Python实现的科学计算器功能示例
2017/08/04 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
python实现超市商品销售管理系统
2019/11/22 Python
python中最小二乘法详细讲解
2021/02/19 Python
Staples美国官方网站:办公用品一站式采购
2016/07/28 全球购物
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
会计岗位职责
2013/11/08 职场文书
给小学生的新年寄语
2014/04/04 职场文书
倡议书格式范文
2014/04/14 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
2015年化验员工作总结
2015/04/10 职场文书
辛亥革命观后感
2015/06/02 职场文书
班主任工作总结范文
2015/08/13 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android