寫一個通用的事件監聽函式
阿新 • • 發佈:2019-02-14
var Event = {
//頁面載入完成後
readyEvent:function(fn){
if(fn == null){
fn = document;
}
var oldonload = window.onload;
if(typeof window.onload != 'function'){
window.onload = fn;
}else{
window.onload = function(){
oldonload();
fn();
}
}
},
//新增事件
addEvent:function(element,type,hander){
if(element.addEventListener){ //非IE
//事件型別,需要執行的函式,是否捕獲
element.addEventListener(type,hander,false);
}else if(element.attachEvent){ //IE
element.attachEvent("on"+type,function(){
hander.call(element);
})
}else{
element["on"+type] = hander;
}
},
//移除事件
removeEvent:function(element,type,hander){
if(element.removeEventListener){
element.removeEventListener(type,hander,false)
}else if(element.attachEvent){
element.attachEvent("on"+type,hander);
}else{
element["on"+type] = null;
}
},
//阻止事件
stopPropagation:function(event){
if(event.stopPropagation){
event.stopPropagation();//w3c標準
}else{
event.cancelBubble = true; //ie
}
},
//取消預設事件
preventDefault:function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false; //ie
}
},
//獲取事件目標
getTarget:function(event){
return event.target || event.srcElement;
},
//獲取event物件的引用,取到事件的所有資訊,確保隨時能使用event;
getEvent:function(e){
var even = e || window.event;
if(!even){
var c = this.getEvent.caller;
while(!c){
even = c.arguments[0];
if(even && Event == even.constructor){
break;
}
c = c.caller;
}
}
return even;
}
}
//頁面載入完成後
readyEvent:function(fn){
if(fn == null){
fn = document;
}
var oldonload = window.onload;
if(typeof window.onload != 'function'){
window.onload = fn;
}else{
window.onload = function(){
oldonload();
fn();
}
}
},
//新增事件
addEvent:function(element,type,hander){
if(element.addEventListener){ //非IE
//事件型別,需要執行的函式,是否捕獲
element.addEventListener(type,hander,false);
}else if(element.attachEvent){ //IE
element.attachEvent("on"+type,function(){
hander.call(element);
})
}else{
element["on"+type] = hander;
}
},
//移除事件
removeEvent:function(element,type,hander){
if(element.removeEventListener){
element.removeEventListener(type,hander,false)
}else if(element.attachEvent){
element.attachEvent("on"+type,hander);
}else{
element["on"+type] = null;
}
},
//阻止事件
stopPropagation:function(event){
if(event.stopPropagation){
event.stopPropagation();//w3c標準
}else{
event.cancelBubble = true; //ie
}
},
//取消預設事件
preventDefault:function(event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false; //ie
}
},
//獲取事件目標
getTarget:function(event){
return event.target || event.srcElement;
},
//獲取event物件的引用,取到事件的所有資訊,確保隨時能使用event;
getEvent:function(e){
var even = e || window.event;
if(!even){
var c = this.getEvent.caller;
while(!c){
even = c.arguments[0];
if(even && Event == even.constructor){
break;
}
c = c.caller;
}
}
return even;
}
}