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操作XML文件之XML读取方法
Jun 09 Javascript
jQuery结合CSS制作动态的下拉菜单
Oct 27 Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 Javascript
jstree的简单实例
Dec 01 Javascript
jQuery常见的选择器及用法介绍
Dec 20 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
Apr 12 Javascript
微信小程序 开发之全局配置
May 05 Javascript
vue实现点击关注后及时更新列表功能
Jun 26 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
postman自定义函数实现 时间函数的思路详解
Apr 17 Javascript
vue.js click点击事件获取当前元素对象的操作
Aug 07 Javascript
关于JavaScript 中 if包含逗号表达式
Nov 27 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/05 新手入门
yii中widget的用法
2014/12/03 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
ES6 Map结构的应用实例分析
2019/06/26 Javascript
vue实现购物车案例
2020/05/30 Javascript
javascript实现拼图游戏
2021/01/29 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python中logging模块的用法实例
2014/09/29 Python
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Python lambda表达式用法实例分析
2018/12/25 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
openCV提取图像中的矩形区域
2020/07/21 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
财务部出纳岗位职责
2013/12/22 职场文书
美术教师自我鉴定
2014/02/12 职场文书
2014高考励志标语
2014/06/05 职场文书
保护水资源的标语
2014/06/17 职场文书
2014年销售经理工作总结
2014/12/01 职场文书