没事改写的addEvent和removeEvent方法

没事改写的addEvent和removeEvent方法,有不妥的地方望大大们不吝指出。

View Code
1 void function (win) {
2 var _addEvent = win.addEvent, _removeEvent = win.removeEvent,
3 f = { data: {}, key: " __guid__ " , ele_guid: 1 , fun_guid: 1 },
4 addEvent = win.addEvent = function (obj, type, fn) {
5 var d = f.data, k = f.key, k1 = ele_guid(obj), k2 = fn[k], isBind = false ;
6 if (isFunction(fn)) { if ( ! k2) { fn[k] = k2 = f.fun_guid ++ ; } } else { return ; }
7 if ( ! k1) { ele_guid(obj, k1 = f.ele_guid ++ ); }
8 if ( ! d[k1]) { d[k1] = {}; }
9 if ( ! d[k1][type]) { d[k1][type] = {}, isBind = true ; }
10 if ( ! d[k1][type][k2]) { d[k1][type][k2] = fn; }
11 if (isBind) { bind(obj, type, fixHandler); }
12 return k2;
13 }, removeEvent = win.removeEvent = function (obj, type, fn) {
14 var d = f.data, k1 = ele_guid(obj), k2 = fn[f.key];
15 if ( ! isFunction(fn)) { k2 = fn; }
16 if ( ! d[k1] || ! d[k1][type] || ! d[k1][type][k2]) { return ; }
17 delete d[k1][type][k2];
18 };
19 function isFunction(f) { return Object.prototype.toString.call(f) === " [object Function] " ; }
20 function ele_guid(ele, guid) {
21 if (guid) {
22 if (ele.setAttribute) { ele.setAttribute(f.key, guid) } else { ele[f.key] = guid }
23 } else {
24 return ele.getAttribute ? ele.getAttribute(f.key) : ele[f.key];
25 }
26 }
27 function bind(obj, type, fn) {
28 if (obj.addEventListener) {
29 obj.addEventListener(type, fn, false );
30 } else if (obj.attachEvent) {
31 obj.attachEvent( ' on ' + type, ( function (o) { return function (event) { fn.call(o, event); } })(obj));
32 }
33 }
34 function fixEvent(event) {
35 if ( ! event.target) { event.target = event.srcElement; }
36 if ( ! event.stopPropagation) { event.stopPropagation = fixEvent.stopPropagation; }
37 if ( ! event.preventDefault) { event.preventDefault = fixEvent.preventDefault; }
38 return event;
39 }
40 fixEvent.stopPropagation = function () { this .cancelBubble = true ; }
41 fixEvent.preventDefault = function () { this .returnValue = false ; }
42 function fixHandler(event) {
43 event = fixEvent(event);
44 var ele = event.target, d = f.data, k1 = ele_guid(ele), handles = d[k1][event.type], fn;
45 for (fn in handles) { if (isFunction(handles[fn])) { handles[fn].call(ele, event); } }
46 }
47 } (window);

转载于:https://www.cnblogs.com/code/articles/2020152.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值