JavaScript中事件機(jī)制的示例分析

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

青云譜網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),青云譜網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為青云譜上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的青云譜做網(wǎng)站的公司定做!

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

如何理解事件?

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

事件:用戶(hù)或?yàn)g覽器自身執(zhí)行的某種動(dòng)作,換言之,文檔或?yàn)g覽器發(fā)生的一些特定的交互瞬間。

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

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

兩種基本事件模型

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

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

IE9、Safari、Chrome、Opera、Firefox都是從window對(duì)象開(kāi)始捕獲,冒泡到window對(duì)象

JavaScript中事件機(jī)制的示例分析

DOM事件流

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

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

IE事件流

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

事件處理程序綁定方式

DOM事件處理程序

DOM事件處理程序?qū)傩悦麨椤皁n”+事件名,程序作用域?yàn)樵氐淖饔糜?,this指向元素本身。

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

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

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

方法二:通過(guò)addEventListener方法。如下:

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

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

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

此方法可以添加多個(gè)事件處理程序

IE事件處理程序

IE+Oprea瀏覽器

程序作用域?yàn)槿肿饔糜?,this指向window對(duì)象

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

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

事件對(duì)象

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

DOM中的事件對(duì)象

對(duì)象名:event

常用屬性:

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

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

常用方法:

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

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

IE中的事件對(duì)象

對(duì)象名:window.event

常用屬性:

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

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

常用方法:

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

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

/*可跨瀏覽器的事件處理程序
構(gòu)造EventUtil對(duì)象,為其添加可兼容各瀏覽器的事件處理方法
*/
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;
    }
  },
  /*獲得事件對(duì)象*/
  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;
    }
  }
};

以上是“JavaScript中事件機(jī)制的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章題目:JavaScript中事件機(jī)制的示例分析
文章鏈接:http://bm7419.com/article6/ijhcog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、微信公眾號(hào)、網(wǎng)站策劃外貿(mào)網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)