您现在的位置:首页 --> JavaScript --> Js事件监听封装(支持匿名函数)
Js事件监听封装(支持匿名函数)
浏览:3435次 出处信息
关于js中的事件监听大家用的比较多了,无非是判断浏览器是否支持addEventListener和attachEvent,网上搜索关于事件监听的方法也挺多,但是总有些不是很完善。下面的方法中对于添加事件监听的方法是一样的,只不过在取消事件绑定上面做了点手术,现在可以支持匿名函数的使用,所以在绑定事件的时候不再需要给函数单独命名了。
先看demo:http://liutian1937.github.io/demo/EventListen.html
主要代码:
/*绑定事件与取消绑定*/ var handleHash = {}; var bind = (function() { if (window.addEventListener) { return function(el, type, fn, capture) { el.addEventListener(type, function(){ fn(); handleHash[type] = handleHash[type] || []; handleHash[type].push(arguments.callee); }, capture); }; } else if (window.attachEvent) { return function(el, type, fn, capture) { el.attachEvent("on" + type, function(){ fn(); handleHash[type] = handleHash[type] || []; handleHash[type].push(arguments.callee); }); }; } })(); var unbind = (function(){ if (window.addEventListener) { return function(el, type ) { if(handleHash[type]){ var i = 0, len = handleHash[type].length; for (i; i<len ; i += 1){ el.removeEventListener(type, handleHash[type][i]); } }; }; } else if (window.attachEvent) { return function(el, type) { if(handleHash[type]){ var i = 0, len = handleHash[type].length; for (i; i<len ; i += 1){ el.detachEvent("on" + type, handleHash[type][i]); } }; }; } })();
原理解析:
handleHash做哈希表缓存事件的function,handleHash['事件名称']是一个数组,来添加多个事件监听的方法,unbind哪个事件的时候遍历handleHash['事件名称']的数组,然后移除。
使用:
bind(obj,'click',function(){ alert ('click'); }); unbind(obj,'click');
建议继续学习:
- 各种浏览器审查、监听http头工具介绍 (阅读:6011)
- jQuery事件编写进阶 (阅读:3268)
- jQuery事件的冒泡过程 (阅读:2876)
- js中鼠标滚轮事件详解 (阅读:2413)
- 在 JavaScript 中监听 IME 键盘输入事件 (阅读:2272)
- 关于Javascript的俩个有趣的探讨 (阅读:2264)
- 提高短连接监听性能方法测试 (阅读:2189)
- javascript事件:获取事件对象getEvent函数 (阅读:2155)
- 基于事件的社会化网站 (阅读:1819)
- 一种生成事件脉络的方法 (阅读:1751)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:了解模块化开发
文章信息
- 作者:痞子 来源: 牛魔王的世界观
- 标签: 事件 监听
- 发布时间:2013-06-18 13:57:30
建议继续学习
近3天十大热文
- [160] Go Reflect 性能
- [19] [译]Google Chrome中的高性能网
- [17] 在FreeNAS/BSD搭建基于Nginx+
- [16] 关于Linux的文件系统cache
- [14] Linux常用系统信息查看命令
- [14] 最近总结的一些技巧(vim,python,s
- [12] PHP加速器 eaccelerator 缓存
- [11] 精于图片处理的10款jQuery插件
- [11] 什么是DNS劫持和DNS污染?
- [10] base64_encode 和 urlenc