淺談事件兼容性問題

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ā)者工具的代碼,寫的好了??!奔潰!

謝謝,望大神指教!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是事件: 我們可以簡(jiǎn)單的把事件理解為瀏覽器的感知系統(tǒng)。比如說:他可以感覺到用戶是否點(diǎn)擊(click)了頁面、鼠...
    張松1366閱讀 7,004評(píng)論 1 6
  • 事件流 事件流描述的是從頁面中接收事件的順序。事件流包括三個(gè)階段:事件捕獲階段,處于目標(biāo)階段,事件冒泡階段。 事件...
    練曉習(xí)閱讀 235評(píng)論 0 0
  • DOM DOM內(nèi)容主要分為四部分: 什么是DOM和節(jié)點(diǎn); 獲取節(jié)點(diǎn); 節(jié)點(diǎn)操作(3種); 屬性操作(3種)。 什么...
    magic_pill閱讀 905評(píng)論 0 1
  • DOM0 事件和DOM2級(jí)在事件監(jiān)聽使用方式上有什么區(qū)別? DOM 0 級(jí)事件是基于元素內(nèi)聯(lián)屬性或DOM元素命名的...
    邢烽朔閱讀 395評(píng)論 0 0
  • 事件流: 事件流:頁面接收事件的順序。 IE定義的:事件冒泡流(由最具體的元素依次傳播到DOM樹的最上層的Docu...
    xiaoguo16閱讀 658評(píng)論 0 0

友情鏈接更多精彩內(nèi)容