您现在的位置:首页 --> JavaScript --> Js事件监听封装(支持匿名函数)
Js事件监听封装(支持匿名函数)
浏览:4475次 出处信息
关于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头工具介绍 (阅读:7235)
- jQuery事件编写进阶 (阅读:3902)
- jQuery事件的冒泡过程 (阅读:3608)
- js中鼠标滚轮事件详解 (阅读:3037)
- 在 JavaScript 中监听 IME 键盘输入事件 (阅读:2963)
- 关于Javascript的俩个有趣的探讨 (阅读:2974)
- 社会化媒体:监听和衡量 (阅读:2900)
- 提高短连接监听性能方法测试 (阅读:2799)
- javascript事件:获取事件对象getEvent函数 (阅读:2713)
- 基于事件的社会化网站 (阅读:2558)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:了解模块化开发
文章信息
- 作者:痞子 来源: 牛魔王的世界观
- 标签: 事件 监听
- 发布时间:2013-06-18 13:57:30
建议继续学习
近3天十大热文
-
[927] WordPress插件开发 -- 在插件使用 -
[133] 解决 nginx 反向代理网页首尾出现神秘字 -
[52] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 整理了一份招PHP高级工程师的面试题 -
[50] 全站换域名时利用nginx和javascri -
[50] 海量小文件存储 -
[50] 用 Jquery 模拟 select -
[49] CloudSMS:免费匿名的云短信 -
[48] Innodb分表太多或者表分区太多,会导致内 -
[47] jQuery性能优化指南
