自定義事件處理函數
阿新 • • 發佈:2017-08-23
rem pan 時間函數 sna 自定義 n) cti .class ntb
解決了傳統事件處理函數的覆蓋問題、可讀性問題、this傳遞問題
1 //添加時間函數 2 function addEvent(obj,type,fn){ //obj相當於window,type相當於onload,fn相當於function(){}; 3 var saved = null; //用於保存上一個事件 4 if (typeof obj[‘on‘ + type] == ‘function‘) { //用於判斷事件是否存在 5 saved = obj[‘on‘ + type]; //保存上一個事件6 } 7 8 obj[‘on‘ + type] = function(){ 9 if (saved) saved(); 10 fn.call(this); //把this傳過去,傳統onclick會自動傳 11 }; 12 } 13 14 //移除事件函數 15 16 function removeEvent(obj,type){ 17 if (obj[‘on‘ + type]) obj[‘on‘ + type] = null; 18 } 19 20 21 //事件切換器 22 addEvent(window,‘load‘,function(){ 23 var box = document.getElementById("box"); 24 addEvent(box,‘click‘,toBlue); 25 }); 26 27 function toBlue(){ 28 this.className = "blue"; 29 removeEvent(this,‘click‘); 30 addEvent(this,‘click‘,toRed); 31 } 32 33 function toRed(){ 34 this.className = "red";35 removeEvent(this,‘click‘); 36 addEvent(this,‘click‘,toBlue); 37 }
自定義事件處理函數