中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中事件機制的示例分析

發布時間:2021-07-01 15:47:16 來源:億速云 閱讀:119 作者:小新 欄目:web開發

這篇文章主要介紹JavaScript中事件機制的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

事件是將JavaScript腳本與網頁聯系在一起的主要方式,是JavaScript中最重要的主題之一,深入理解事件的工作機制以及它們對性能的影響至關重要。本文將詳細探討JavaScript的事件機制,并對比分析了瀏覽器之間的不同,具體內容包括事件流、事件處理程序綁定方式、事件對象等。

如何理解事件?

JavaScript與HTML之間的交互就是通過事件實現的。

事件:用戶或瀏覽器自身執行的某種動作,換言之,文檔或瀏覽器發生的一些特定的交互瞬間。

事件處理程序:又稱事件偵聽器,事件發生時執行的代碼段。

事件流:事件流描述的是從頁面中接收事件的順序。

兩種基本事件模型

事件冒泡:事件按照從最特定的事件目標到最不特定的事件目標(document對象)的順序觸發。

事件捕獲:事件從最不精確的對象(document 對象)開始觸發,然后到最精確。

IE9、Safari、Chrome、Opera、Firefox都是從window對象開始捕獲,冒泡到window對象

JavaScript中事件機制的示例分析

DOM事件流

同時支持 兩種基本事件模型,規定事件流包括三個階段:事件捕獲階段、處于目標階段、事件冒泡階段。

DOM事件處理程序綁定時,程序員可以自己選擇綁定事件時采用事件捕獲還是事件冒泡。

IE事件流

IE只支持事件冒泡,不支持事件捕獲。

事件處理程序綁定方式

DOM事件處理程序

DOM事件處理程序屬性名為“on”+事件名,程序作用域為元素的作用域,this指向元素本身。

方法一:將函數值賦給一個事件處理程序屬性。如下:

var btn= document.getElementById("myBtn"); 
btn.onclick = function{ //具體代碼段 }

注意:此種方法只能添加一個事件處理程序

方法二:通過addEventListener方法。如下:

addEventListener("事件名",事件處理程序,ture/false:在事件捕獲/冒泡階段調用模型)

對應的事件處理程序移除方法:removeEventListener,參數必須相同。

注意:此種方法,以匿名函數添加的事件處理程序無法被移除

此方法可以添加多個事件處理程序

IE事件處理程序

IE+Oprea瀏覽器

程序作用域為全局作用域,this指向window對象

添加方法:attachEvent("on+事件名",事件處理程序)

移除方法:detachEvent("on+事件名",事件處理程序)

事件對象

在觸發某個事件時,會產生一個相應的事件對象,這個對象包含所有與事件相關的信息。如:導致事件的元素、事件的類型等

DOM中的事件對象

對象名:event

常用屬性:

type:被觸發事件的類型

target:事件的目標

常用方法:

event.preventDefault:取消事件默認行為(前提:cancelable屬性值為true)

event.stopPropagation:取消事件的進一步冒泡或捕獲

IE中的事件對象

對象名:window.event

常用屬性:

type:被觸發事件的類型

scrElement:事件的目標

常用方法:

event.cancelBubble(true/false):true->取消事件默認行為
event.returnValue(true/false):false->取消事件的進一步冒泡或捕獲

綜合以上所述,整理代碼寫可跨瀏覽器的事件處理程序(構造EventUtil對象,為其添加可兼容各瀏覽器的事件處理方法),如下:

/*可跨瀏覽器的事件處理程序
構造EventUtil對象,為其添加可兼容各瀏覽器的事件處理方法
*/
var EventUtil = {
  /*添加事件處理程序*/
  addHandler: function (element, type, handler) {
    if (element.addEventListener) {
      addEventListener(type, handler, false);
    } else if (element.attachEvent) {
      attachEvent("on" + type, handler);
    } else {
      element["on" + type] = handler;
    }
  },
  /*移除事件處理程序*/
  removeHandler: function (element, type, handler) {
    if (element.removeEventListener) {
      removeEventListener(type, handler, false);
    } else if (element.detachEvent) {
      detachEvent("on" + type, handler);
    } else {
      element["on" + type] = null;
    }
  },
  /*獲得事件對象*/
  getEvent: function (event) {
    return event ? event : window.event;
  },
  /*獲得事件的目標*/
  getTarget: function (event) {
    return event.target || event.scrElement;
  },
  /*取消事件的默認行為*/
  preventDefault: function (event) {
    if (event.preventDefault) {
      event.preventDefault;
    } else {
      event.returValue = false;
    }
  },
  /*阻止事件進一步冒泡*/
  stopPropagation: function (event) {
    if (event.stopPropagation) {
      event.stopPropagation;
    } else {
      event.cancelBubble = true;
    }
  }
};

以上是“JavaScript中事件機制的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四平市| 宁明县| 石台县| 荔浦县| 渑池县| 馆陶县| 新泰市| 奉化市| 济南市| 密云县| 昭觉县| 揭阳市| 商都县| 富民县| 莒南县| 孟村| 临泉县| 肇源县| 黔江区| 万宁市| 特克斯县| 辽宁省| 寿宁县| 榕江县| 共和县| 定州市| 明光市| 福清市| 灵丘县| 乌拉特后旗| 甘泉县| 澄迈县| 天气| 恭城| 柳州市| 柳林县| 堆龙德庆县| 乌拉特中旗| 贵阳市| 亳州市| 罗甸县|