跨浏览器事件兼容,巧妙处理方法
2018-06-24 00:09:26来源:未知 阅读 ()
说到原生浏览器事件函数处理兼容,大家可能会想到addEventListener().....以及attachEvent()....
相信看了下文,会给你提供不一样的更优雅的实现方式,希望下文会对你有帮助~~~~~
//添加事件处理函数 function addEvent(element, type, handler){ //如果函数之前没有绑定过事件(包括通过dom一级 on+‘方法名’绑定的),则增加函数的唯一标识,以便移除事件用到 if(!handler) handler.$$guid = addEvent.$$guid ++; //如果元素上不存在events对象则新建一个 if(!element.events) element.events = {}; //如果events对象相应的类型存在的对象不存在,则新创建一个 var handlers = element.events[type]; if(!handlers){ handlers = element.events[type] = {}; //如果存在dom一级方式绑定了相同类型的事件,在type类型的事件触发时一并触发,这里先type对应的对象handlers中 if(element["on" + type]){ handlers[0] = element["on" + type]; } } //将事件处理函数以键值对如{$$guid : handler}的方式保存起来供后面调用 handlers[handler.$$guid] = handler; //以下的handlerEvent方法本人认为很巧妙,可谓’偷梁换柱‘呀 element["on" + type] = handleEvent; } addEvent.$$guid = 1; //事件处理函数处理,精华所在 function handleEvent(event){ //默认事件操作不取消 var returnValue = true; //处理事件对象兼容,包括冒泡和阻止默认事件传播两个方法 event = event || fixEvent(window.event); var handlers = this.events[type];
for(var i in handlers){ //为了保证正确的上下文,即发生事件的dom元素 this.$$handleEvent = handlers[i]; //如果上面传进来的函数返回值为false,则结果为了保持一致,也要为false if(this.$$handleEvent(event) === false){ return returnValue = false; } } return returnValue; } function fixEvent(event){ //添加w3c事件对象方法兼容,返回的对象时具有兼容性的event event.preventDefault = fixEvent.preventDefault; event.stopPropagation = fixEvent.stopPropagation; return event; } //处理ie下event兼容 fixEvent.preventDefault = function (){ this.returnValue = false; } fixEvent.stopPropagation = function(){ this.cancelBubble = true; }; //移除事件处理函数 function removeEvent(element, type, handler){ if(element.events && element.events[type]) delete element.events[type][handler.$$guid] }
总结:以上方法也是jquery源码中Event模块中add的方法的借鉴来源,资料来源于此博客http://dean.edwards.name/weblog/2005/10/add-event/
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- JS 控件事件小结 2020-03-25
- JS判断浏览器是否安装flash插件的简单方法 2020-03-12
- 使用JS在浏览器中判断当前网络连接状态的几种方法 2020-03-12
- 分享JavaScript获取网页关闭与取消关闭的事件 2020-02-29
- Js操作DOM元素及获取浏览器高宽的简单方法 2019-12-31
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash