溫馨提示×

溫馨提示×

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

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

JS中如何使用自定義事件與觸發(fā)操作

發(fā)布時間:2021-08-04 14:32:22 來源:億速云 閱讀:175 作者:小新 欄目:web開發(fā)

小編給大家分享一下JS中如何使用自定義事件與觸發(fā)操作,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

具體如下:

1. 事件的創(chuàng)建

JS中,最簡單的創(chuàng)建事件方法,是使用Event構(gòu)造器:

var myEvent = new Event('event_name');

但是為了能夠傳遞數(shù)據(jù),就需要使用 CustomEvent 構(gòu)造器:

var myEvent = new CustomEvent('event_name', {
 detail:{
  // 將需要傳遞的數(shù)據(jù)寫在detail中,以便在EventListener中獲取
  // 數(shù)據(jù)將會在event.detail中得到
 },
});

2. 事件的監(jiān)聽

JS的EventListener是根據(jù)事件的名稱來進行監(jiān)聽的,比如我們在上文中已經(jīng)創(chuàng)建了一個名稱為‘event_name' 的事件,那么當某個元素需要監(jiān)聽它的時候,就需要創(chuàng)建相應(yīng)的監(jiān)聽器:

//假設(shè)listener注冊在window對象上
window.addEventListener('event_name', function(event){
 // 如果是CustomEvent,傳入的數(shù)據(jù)在event.detail中
 console.log('得到數(shù)據(jù)為:', event.detail);

 // ...后續(xù)相關(guān)操作
});

至此,window對象上就有了對‘event_name' 這個事件的監(jiān)聽器,當window上觸發(fā)這個事件的時候,相關(guān)的callback就會執(zhí)行。

3. 事件的觸發(fā)

對于一些內(nèi)置(built-in)的事件,通常都是有一些操作去做觸發(fā),比如鼠標單擊對應(yīng)MouseEvent的click事件,利用鼠標(ctrl+滾輪上下)去放大縮小頁面對應(yīng)WheelEvent的resize事件。
然而,自定義的事件由于不是JS內(nèi)置的事件,所以我們需要在JS代碼中去顯式地觸發(fā)它。方法是使用 dispatchEvent 去觸發(fā)(IE8低版本兼容,使用fireEvent):

// 首先需要提前定義好事件,并且注冊相關(guān)的EventListener
var myEvent = new CustomEvent('event_name', { 
 detail: { title: 'This is title!'},
});
window.addEventListener('event_name', function(event){
 console.log('得到標題為:', event.detail.title);
});
// 隨后在對應(yīng)的元素上觸發(fā)該事件
if(window.dispatchEvent) { 
 window.dispatchEvent(myEvent);
} else {
 window.fireEvent(myEvent);
}
// 根據(jù)listener中的callback函數(shù)定義,應(yīng)當會在console中輸出 "得到標題為: This is title!"

需要特別注意的是,當一個事件觸發(fā)的時候,如果相應(yīng)的element及其上級元素沒有對應(yīng)的EventListener,就不會有任何回調(diào)操作。

對于子元素的監(jiān)聽,可以對父元素添加事件托管,讓事件在事件冒泡階段被監(jiān)聽器捕獲并執(zhí)行。這時候,使用event.target就可以獲取到具體觸發(fā)事件的元素。

以上是“JS中如何使用自定義事件與觸發(fā)操作”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

js
AI