淺談事件兼容性問題

1、兼容性

(1)語法(syntax): addEventListener(type, handler, useCapture)

type:事件類型

handler:事件處理函數

useCapture:是否在捕獲階段觸發

兼容支持:ie9 以上主流瀏覽器。

(2) 語法(syntax):attachEvent("on" + type, hander )

type:事件類型

handler:事件處理函數

兼容支持:ie6-10。

2、初級封裝

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;

? ? ? ? }

}

缺點:同一個頁面里有多次注冊事件,而每次調用都要判斷一次瀏覽器的支持環境,浪費資源!

3、中級封裝

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;

? ? ? ? ? ? ? ?}

? ? ? ?}

}

優點:調用craeteRegister函數,并不是在注冊事件,而是獲取一個當前瀏覽器支持的注冊事件的方式? ??

?var? eventRegister? =? createRegister();

缺點:(1).事件對象的獲取,要處理;

? ? ? ? ? ?(2). this的指向問題,也要處理。

3、高級封裝

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(){

//使用一個中間函數,這樣子就可以自己控制調用了,call方法將this指向我們需要的ele.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?handler.call(ele,window.event);

? ? ? ? ? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ? }

? ? ? ? ?}else{

? ? ? ? ? ? ? ? ?return function(ele,type,handler){

? ? ? ? ? ? ? ? ? ? ? ?ele["on"+type]=handler;

? ? ? ? ? ? ? ? ?}

? ? ? ? ? }

}

優點:(1)、使用我們封裝好的eventRegister這個函數的時候,不再需要考慮瀏覽器的兼容性問題。

(2)、用一種統一的方式,就能夠獲取到事件對象,以及當前點擊的元素對象。

總結:第一次寫簡書,好不習慣啊,求教怎么在上面寫出開發者工具的代碼,寫的好了啊!奔潰!

謝謝,望大神指教!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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