把javascript event事件封装了下,兼容大多数浏览器
2011-09-01 17:36
281 查看
/Files/sniper007/IEEVENT.rar
代码如下
var $ = {};
$.addEvent = function(element, eventType, handler){
var self = this;
var i = self._find(element, eventType, handler);
if(i != -1){
return;
}
function wrappedHandler(e){
e = window.event || e;
var event = self._formatEvent(e);
event._event = e;
handler.call(element, event);
}
if (element.addEventListener) {
element.addEventListener(eventType, wrappedHandler, false);
} else if (element.attachEvent) {
element.attachEvent("on" + eventType, wrappedHandler);
} else {
element["on" + eventType] = wrappedHandler;
}
var h = {
element : element,
eventType : eventType,
handler : handler,
wrappedHandler : wrappedHandler
},
d = self._getDoc(element),
w = d.parentWindow || window,
id = self._uuid();
self._window = w;
if(!w._allHandlers){
w._allHandlers = {};
}
w._allHandlers[id] = h;
if(!element._handlers){
element._handlers = [];
}
element._handlers.push(id);
if(!w._onunloadHandlerRegistered){
w._onunloadHandlerRegistered = true;
if(w.attachEvent){
w.attachEvent("onunload", self._removeAllHandlers);
}
}
};
$.removeEvent = function(element, eventType, handler){
var self = this;
var i = self._find(element, eventType, handler);
if(i == -1){
return;
}
var d = self._getDoc(element),
w = d.parentWindow || window,
handlerId = element._handlers[i],
h = w._allHandlers[handlerId];
self._window = w;
if(element.removeEventListener) {
element.removeEventListener(eventType, h.wrappedHandler, false);
}else if(element.detachEvent) {
element.detachEvent("on" + eventType, h.wrappedHandler);
}else{
element["on" + eventType] = null;
}
element._handlers.splice(i, 1);
delete w._allHandlers[handlerId];
};
$.fireEvent = function(element, eventType){
var self = this;
if (document.dispatchEvent) {
var evt = null,
doc = self._getDoc(element);
if (/mouse|click/i.test(eventType)) {
evt = doc.createEvent('MouseEvents');
evt.initMouseEvent(eventType, true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
} else {
evt = doc.createEvent('Events');
evt.initEvent(eventType, true, true, doc.defaultView);
}
element.dispatchEvent(evt);
}else{
element.fireEvent('on' + eventType);
}
};
$.hover = function(element, overHandler, outHandler){
var self = this;
self.addEvent(element, "mouseover", overHandler);
self.addEvent(element, "mouseout", outHandler);
};
$._find = function(element, eventType, handler){
var handlers = element._handlers,
self = this;
if(!handlers){
return -1;
}
var d = self._getDoc(element),
w = d.parentWindow || window;
for(var i = handlers.length - 1; i >= 0; i--){
var handlerId = handlers[i],
h = w._allHandlers[handlerId];
if(h.eventType == eventType && h.handler == handler){
return i;
}
}
return -1;
};
$._formatEvent = function (oEvent) {
if (typeof oEvent.charCode == "undefined") {
oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;
oEvent.isChar = (oEvent.charCode > 0);
}
if (oEvent.srcElement && !oEvent.target) {
oEvent.eventPhase = 2;
oEvent.pageX = oEvent.clientX + document.body.scrollLeft;
oEvent.pageY = oEvent.clientY + document.body.scrollTop;
if (!oEvent.preventDefault) {
oEvent.preventDefault = function () {
this.returnValue = false;
};
}
if (oEvent.type == "mouseout") {
oEvent.relatedTarget = oEvent.toElement;
} else if (oEvent.type == "mouseover") {
oEvent.relatedTarget = oEvent.fromElement;
}
if (!oEvent.stopPropagation) {
oEvent.stopPropagation = function () {
this.cancelBubble = true;
};
}
oEvent.target = oEvent.srcElement;
oEvent.time = (new Date).getTime();
}
return oEvent;
};
$._removeAllHandlers = function(){
var self = this,
w = self._window || window;
for(var id in w._allHandlers){
var h = w._allHandlers[id];
if(h.element.detachEvent){
h.element.detachEvent("on" + h.eventType, h.wrappedHandler);
}
delete w._allHandlers[id];
}
}
$._getDoc = function(element){
return element.ownerDocument || element.document || ((element.defaultView || element.window) && element) || document;
};
$._uuid = function(){
var _counter = 0;
return function(){
return "h" + _counter++;
}
};
function run(e){
alert(e.pageX);
}
var edit = document.getElementById("edit");
var del = document.getElementById("del");
var fire = document.getElementById("fire");
$.addEvent(edit, "click", run);
$.addEvent(del, "click", function(e){
$.removeEvent(edit, "click", run);
});
$.addEvent(fire, "click", function(){
$.fireEvent(edit, "click");
});
$.hover(fire, function(e){
console.log(e.pageX);
}, function(e){
console.log(e.pageY);
}); PS:参考了JAVASCRIOT权威指南
代码如下
var $ = {};
$.addEvent = function(element, eventType, handler){
var self = this;
var i = self._find(element, eventType, handler);
if(i != -1){
return;
}
function wrappedHandler(e){
e = window.event || e;
var event = self._formatEvent(e);
event._event = e;
handler.call(element, event);
}
if (element.addEventListener) {
element.addEventListener(eventType, wrappedHandler, false);
} else if (element.attachEvent) {
element.attachEvent("on" + eventType, wrappedHandler);
} else {
element["on" + eventType] = wrappedHandler;
}
var h = {
element : element,
eventType : eventType,
handler : handler,
wrappedHandler : wrappedHandler
},
d = self._getDoc(element),
w = d.parentWindow || window,
id = self._uuid();
self._window = w;
if(!w._allHandlers){
w._allHandlers = {};
}
w._allHandlers[id] = h;
if(!element._handlers){
element._handlers = [];
}
element._handlers.push(id);
if(!w._onunloadHandlerRegistered){
w._onunloadHandlerRegistered = true;
if(w.attachEvent){
w.attachEvent("onunload", self._removeAllHandlers);
}
}
};
$.removeEvent = function(element, eventType, handler){
var self = this;
var i = self._find(element, eventType, handler);
if(i == -1){
return;
}
var d = self._getDoc(element),
w = d.parentWindow || window,
handlerId = element._handlers[i],
h = w._allHandlers[handlerId];
self._window = w;
if(element.removeEventListener) {
element.removeEventListener(eventType, h.wrappedHandler, false);
}else if(element.detachEvent) {
element.detachEvent("on" + eventType, h.wrappedHandler);
}else{
element["on" + eventType] = null;
}
element._handlers.splice(i, 1);
delete w._allHandlers[handlerId];
};
$.fireEvent = function(element, eventType){
var self = this;
if (document.dispatchEvent) {
var evt = null,
doc = self._getDoc(element);
if (/mouse|click/i.test(eventType)) {
evt = doc.createEvent('MouseEvents');
evt.initMouseEvent(eventType, true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
} else {
evt = doc.createEvent('Events');
evt.initEvent(eventType, true, true, doc.defaultView);
}
element.dispatchEvent(evt);
}else{
element.fireEvent('on' + eventType);
}
};
$.hover = function(element, overHandler, outHandler){
var self = this;
self.addEvent(element, "mouseover", overHandler);
self.addEvent(element, "mouseout", outHandler);
};
$._find = function(element, eventType, handler){
var handlers = element._handlers,
self = this;
if(!handlers){
return -1;
}
var d = self._getDoc(element),
w = d.parentWindow || window;
for(var i = handlers.length - 1; i >= 0; i--){
var handlerId = handlers[i],
h = w._allHandlers[handlerId];
if(h.eventType == eventType && h.handler == handler){
return i;
}
}
return -1;
};
$._formatEvent = function (oEvent) {
if (typeof oEvent.charCode == "undefined") {
oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;
oEvent.isChar = (oEvent.charCode > 0);
}
if (oEvent.srcElement && !oEvent.target) {
oEvent.eventPhase = 2;
oEvent.pageX = oEvent.clientX + document.body.scrollLeft;
oEvent.pageY = oEvent.clientY + document.body.scrollTop;
if (!oEvent.preventDefault) {
oEvent.preventDefault = function () {
this.returnValue = false;
};
}
if (oEvent.type == "mouseout") {
oEvent.relatedTarget = oEvent.toElement;
} else if (oEvent.type == "mouseover") {
oEvent.relatedTarget = oEvent.fromElement;
}
if (!oEvent.stopPropagation) {
oEvent.stopPropagation = function () {
this.cancelBubble = true;
};
}
oEvent.target = oEvent.srcElement;
oEvent.time = (new Date).getTime();
}
return oEvent;
};
$._removeAllHandlers = function(){
var self = this,
w = self._window || window;
for(var id in w._allHandlers){
var h = w._allHandlers[id];
if(h.element.detachEvent){
h.element.detachEvent("on" + h.eventType, h.wrappedHandler);
}
delete w._allHandlers[id];
}
}
$._getDoc = function(element){
return element.ownerDocument || element.document || ((element.defaultView || element.window) && element) || document;
};
$._uuid = function(){
var _counter = 0;
return function(){
return "h" + _counter++;
}
};
function run(e){
alert(e.pageX);
}
var edit = document.getElementById("edit");
var del = document.getElementById("del");
var fire = document.getElementById("fire");
$.addEvent(edit, "click", run);
$.addEvent(del, "click", function(e){
$.removeEvent(edit, "click", run);
});
$.addEvent(fire, "click", function(){
$.fireEvent(edit, "click");
});
$.hover(fire, function(e){
console.log(e.pageX);
}, function(e){
console.log(e.pageY);
}); PS:参考了JAVASCRIOT权威指南
相关文章推荐
- javascript event事件再次封装了,兼容大多数浏览器
- 封装 DOM事件 EventUtil对象 跨浏览器兼容
- 添加和移除事件处理兼容各浏览器的封装(带详细注释)
- DOM事件处理跨浏览器(兼容IE)封装
- 纯JavaScript实现的兼容各浏览器的添加和移除事件封装
- 原生JS绑定滑轮滚动事件兼容常见浏览器
- 【事件】研习兼容各大浏览器的事件监听
- javascript上传图片前预览图片兼容大多数浏览器
- js的window.onscroll事件兼容各大浏览器!
- 关于JavaScript事件和不同浏览器之间的兼容
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
- 鼠标滚轮事件(兼容IE、FireFox、Chrome等浏览器)
- 动态添加点击事件,传参数的比较严谨,以及兼容大部分浏览器的方式
- 一个兼容大多数浏览器 的 图片滚动的js
- js获取键盘按键响应事件(兼容各浏览器)
- form的submit()方法不能触发onsubmit事件的解决方法,兼容各版本浏览器。
- 兼容各大浏览器的JavaScript阻止事件冒泡代码
- 前端学习(2):为document的click事件指定一个事件句柄函数(考虑跨浏览器兼容问题)
- 浏览器兼容:取消冒泡事件
- 如何跨浏览器处理事件【兼容各大浏览器包括ie】