欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript的事件機制詳解

 更新時間:2017年01月17日 09:44:50   作者:熊仔其人  
事件是將JavaScript腳本與網(wǎng)頁聯(lián)系在一起的主要方式,是JavaScript中最重要的主題之一。本文將詳細(xì)探討JavaScript的事件機制,并對比分析了瀏覽器之間的不同,具體內(nèi)容包括事件流、事件處理程序綁定方式、事件對象等。

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

如何理解事件?

JavaScript與HTML之間的交互就是通過事件實現(xiàn)的。

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

事件處理程序:又稱事件偵聽器,事件發(fā)生時執(zhí)行的代碼段。

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

兩種基本事件模型

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

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

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

DOM事件流

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

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

IE事件流

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

事件處理程序綁定方式

DOM事件處理程序

DOM事件處理程序?qū)傩悦麨椤皁n”+事件名,程序作用域為元素的作用域,this指向元素本身。

方法一:將函數(shù)值賦給一個事件處理程序?qū)傩?/span>。如下:

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

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

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

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

對應(yīng)的事件處理程序移除方法:removeEventListener,參數(shù)必須相同。

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

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

IE事件處理程序

IE+Oprea瀏覽器

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

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

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

事件對象

在觸發(fā)某個事件時,會產(chǎn)生一個相應(yīng)的事件對象,這個對象包含所有與事件相關(guān)的信息。如:導(dǎo)致事件的元素、事件的類型等

DOM中的事件對象

對象名:event

常用屬性:

type:被觸發(fā)事件的類型

target:事件的目標(biāo)

常用方法:

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

event.stopPropagation:取消事件的進(jìn)一步冒泡或捕獲

IE中的事件對象

對象名:window.event

常用屬性:

type:被觸發(fā)事件的類型

scrElement:事件的目標(biāo)

常用方法:

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

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

/*可跨瀏覽器的事件處理程序
構(gòu)造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;
  },
  /*獲得事件的目標(biāo)*/
  getTarget: function (event) {
    return event.target || event.scrElement;
  },
  /*取消事件的默認(rèn)行為*/
  preventDefault: function (event) {
    if (event.preventDefault) {
      event.preventDefault;
    } else {
      event.returValue = false;
    }
  },
  /*阻止事件進(jìn)一步冒泡*/
  stopPropagation: function (event) {
    if (event.stopPropagation) {
      event.stopPropagation;
    } else {
      event.cancelBubble = true;
    }
  }
};

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • javascript創(chuàng)建cookie、讀取cookie

    javascript創(chuàng)建cookie、讀取cookie

    這篇文章主要介紹了javascript創(chuàng)建cookie、讀取cookie的操作方法,內(nèi)容簡單易學(xué),感興趣的小伙伴們可以參考一下
    2016-03-03
  • WebGL 顏色與紋理使用介紹

    WebGL 顏色與紋理使用介紹

    這篇文章主要為大家介紹了WebGL 顏色與紋理使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • webpack2.0搭建前端項目的教程詳解

    webpack2.0搭建前端項目的教程詳解

    這篇文章主要給大家介紹了關(guān)于webpack2.0搭建前端項目的相關(guān)資料,文中介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用webpack2.0具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • JS實現(xiàn)隨機亂撞彩色圓球特效的方法

    JS實現(xiàn)隨機亂撞彩色圓球特效的方法

    這篇文章主要介紹了JS實現(xiàn)隨機亂撞彩色圓球特效的方法,可實現(xiàn)彩色小球的碰撞效果,涉及隨機函數(shù)與頁面樣式的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • js for循環(huán),為什么一定要加var定義i變量

    js for循環(huán),為什么一定要加var定義i變量

    我知道,有些人(譬如之前的我)寫js的for循環(huán)時,都不習(xí)慣加上var,這當(dāng)然是語法允許的。
    2010-06-06
  • javascript &&和||運算法的另類使用技巧

    javascript &&和||運算法的另類使用技巧

    一直以為 && 和 || 這兩個偉大的運算法只能在判斷表達(dá)式使用,也就是常在if語句使用,原來錯了,它還可以運用在簡化選擇性執(zhí)行語句的操作,有點拗口,簡單點也就是:操作執(zhí)行某條語句,不執(zhí)行某條語句。
    2009-11-11
  • JS實現(xiàn)簡易圖片輪播效果的方法

    JS實現(xiàn)簡易圖片輪播效果的方法

    這篇文章主要介紹了JS實現(xiàn)簡易圖片輪播效果的方法,實例分析了javascript操作圖片實現(xiàn)輪播特效的技巧,需要的朋友可以參考下
    2015-03-03
  • JS中常用的正則表達(dá)式

    JS中常用的正則表達(dá)式

    這篇文章主要介紹了JS中常用的正則表達(dá)式,都是我日常收集整理的,包括電話驗證,數(shù)字驗證,車牌號碼驗證,身份證號驗證包括15位18位身份證驗證,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • js數(shù)組去重的N種方法(小結(jié))

    js數(shù)組去重的N種方法(小結(jié))

    本文給大家收藏整理了js數(shù)組去重的n種方法,大家可以根據(jù)自己需要選擇比較好的方法,感興趣的朋友一起看看吧
    2018-06-06
  • JavaScript生成一個不重復(fù)的ID的方法示例

    JavaScript生成一個不重復(fù)的ID的方法示例

    這篇文章主要介紹了JavaScript生成一個不重復(fù)的ID的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論