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 相关文章推荐
自适应图片大小的弹出窗口
Jul 27 Javascript
javascript 静态对象和构造函数的使用和公私问题
Mar 02 Javascript
用js控制组织结构图可以任意拖拽到指定位置
Jan 17 Javascript
JavaScript按位运算符的应用简析
Feb 04 Javascript
jQuery插件制作之全局函数用法实例
Jun 01 Javascript
Javascript获取统一管理的提示语(message)
Feb 03 Javascript
ArtEditor富文本编辑器增加表单提交功能
Apr 18 Javascript
Vue概念及常见命令介绍(1)
Dec 08 Javascript
通过jsonp获取json数据实现AJAX跨域请求
Jan 22 Javascript
JavaScript中splice与slice的区别
May 09 Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
网页爬虫之cookie自动获取及过期自动更新的实现方法
Mar 06 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源码之explode使用说明
2011/08/05 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
JQuery常见节点操作实例分析
2019/05/15 jQuery
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Python实现端口复用实例代码
2014/07/03 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
Python 中Pickle库的使用详解
2018/02/24 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
python开发一款翻译工具
2020/10/10 Python
Python调用JavaScript代码的方法
2020/10/27 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
出纳员岗位职责
2014/03/13 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
银行竞聘报告范文
2014/11/06 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
美术教师个人工作总结
2015/02/06 职场文书
运动会新闻稿
2015/07/17 职场文书