Skip to content

Instantly share code, notes, and snippets.

@xiaojue
Last active August 29, 2015 14:04
Show Gist options
  • Save xiaojue/820c04342a0cc4bc184c to your computer and use it in GitHub Desktop.
Save xiaojue/820c04342a0cc4bc184c to your computer and use it in GitHub Desktop.
var Event = {
map: {},
_addqueue: function(el, type, fn, init) {
var queue = Event.map[type + el];
if (!queue) {
queue = [];
init();
}
queue.push(fn);
},
_fire: function(type, el, e) {
var queue = Event.map[type + el];
for (var i = 0; i < queue.length; i++) {
queue[i](e);
}
},
add: function() {
if (el.attachEvent) {
return function(el, type, fn) {
Event._addqueue(el, type, fn, function() {
el.attachEvent('on' + type, function(e) {
Event._fire(type, el, e);
});
});
};
} else {
return function(el, type, fn) {
Event._addqueue(el, type, fn, function() {
el.addEventListener(type, function(e) {
Event._fire(type, el, e);
},
false);
});
};
}
} (),
_findfn: function(fn, queue) {
for (var i = 0; i < queue.length; i++) {
if (queue[i] == fn) return i;
}
return - 1;
},
_removeFn: function(el, type, fn, last) {
var queue = Event.map[type + el];
if (queue.length > 1) {
var index = Event._findfn(fn, queue);
if (index != - 1) queue.splice(index, 1);
} else {
queue = [];
last(fn);
}
},
remove: function(el, type, fn) {
if (el.attachEvent) {
return function(el, type, fn) {
Event._removeFn(el, type, fn, function(fn) {
el.detachEvent('on' + type, fn);
});
};
} else {
return function(el, type, fn) {
Event._removeFn(el, type, fn, function(fn) {
el.removeEventListener(type, fn, false);
});
};
}
} ()
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment