1、兼容性
(1)語法(syntax): addEventListener(type, handler, useCapture)
type:事件類型
handler:事件處理函數(shù)
useCapture:是否在捕獲階段觸發(fā)
兼容支持:ie9 以上主流瀏覽器。
(2) 語法(syntax):attachEvent("on" + type, hander )
type:事件類型
handler:事件處理函數(shù)
兼容支持:ie6-10。
2、初級(jí)封裝
function ?registerEvent(ele,type,handler){
? ? ? ? if(ele.addEventListener){
? ? ? ? ? ? ? ele.addEventListener(type,handler,false);
? ? ? ? }else if(ele.attachEvent){
? ? ? ? ? ? ? ele.attachEvent("on"+type,handler);
? ? ? ? }else{
? ? ? ? ? ? ? ele["on"+type]=handler;
? ? ? ? }
}
缺點(diǎn):同一個(gè)頁面里有多次注冊(cè)事件,而每次調(diào)用都要判斷一次瀏覽器的支持環(huán)境,浪費(fèi)資源!
3、中級(jí)封裝
function ?createRegister(){
? ? ? if(window.addEventListener){
? ? ? ? ? ? ?return function(ele,type,handler){
? ? ? ? ? ? ? ? ? ? ?ele.addEventListener(type,handler,false);
? ? ? ? ? ? ?}
? ? ? ?}else if(window.attachEvent){
? ? ? ? ? ? ?return function(ele,type,handler){
? ? ? ? ? ? ? ? ? ? ele.attachEvent("on"+type,handler);
? ? ? ? ? ? ?}
? ? ? ? }else{
? ? ? ? ? ? ? ?return function(ele,type,handler){
? ? ? ? ? ? ? ? ? ? ? ?ele["on"+type]=handler;
? ? ? ? ? ? ? ?}
? ? ? ?}
}
優(yōu)點(diǎn):調(diào)用craeteRegister函數(shù),并不是在注冊(cè)事件,而是獲取一個(gè)當(dāng)前瀏覽器支持的注冊(cè)事件的方式? ??
?var? eventRegister? =? createRegister();
缺點(diǎn):(1).事件對(duì)象的獲取,要處理;
? ? ? ? ? ?(2). this的指向問題,也要處理。
3、高級(jí)封裝
function? createRegister(){
? ? ? ? ?if(window.addEventListener){
? ? ? ? ? ? ? ? ?return function(ele,type,handler){
? ? ? ? ? ? ? ? ? ? ? ?ele.addEventListener(type,handler,false);
? ? ? ? ? ? ? ? ?}
? ? ? ? ?}else if(window.attachEvent){
? ? ? ? ? ? ? ? return function(ele,type,handler){
? ? ? ? ? ? ? ? ? ? ? ? ele.attachEvent("on"+type,function(){
//使用一個(gè)中間函數(shù),這樣子就可以自己控制調(diào)用了,call方法將this指向我們需要的ele.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?handler.call(ele,window.event);
? ? ? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? }
? ? ? ? ?}else{
? ? ? ? ? ? ? ? ?return function(ele,type,handler){
? ? ? ? ? ? ? ? ? ? ? ?ele["on"+type]=handler;
? ? ? ? ? ? ? ? ?}
? ? ? ? ? }
}
優(yōu)點(diǎn):(1)、使用我們封裝好的eventRegister這個(gè)函數(shù)的時(shí)候,不再需要考慮瀏覽器的兼容性問題。
(2)、用一種統(tǒng)一的方式,就能夠獲取到事件對(duì)象,以及當(dāng)前點(diǎn)擊的元素對(duì)象。
總結(jié):第一次寫簡(jiǎn)書,好不習(xí)慣啊,求教怎么在上面寫出開發(fā)者工具的代碼,寫的好了??!奔潰!
謝謝,望大神指教!