1. 程式人生 > 實用技巧 >Javascript自定義事件

Javascript自定義事件

在JS中事件是JS與瀏覽器互動的主要途徑。事件是一種叫做觀察者的設計模式,這是一種建立鬆散耦合程式碼的技術。物件可以釋出事件,用來表示在該物件生命週期中某個有趣的時刻到了。然後其他物件可以觀察該物件,等待這些有趣的時刻到來並通過執行程式碼來響應。
觀察者模式有兩類物件組成:主題和觀察者。主體負責釋出事件,同時觀察者通過訂閱這些事件來觀察該主體。該模式的一個關鍵概念是主體並不知道觀察者的任何事情,也就是說它可以獨自存在並正常運作即使觀察者不存在。從另一方面說,觀察者知道主體並能註冊事件的回撥函式(事件處理程式)。涉及DOM上時,DOM元素便是主體,你的事件處理程式碼便是觀察者。
事件是與DOM互動的最常見的方式,但它們也可以用於非DOM程式碼中----通過實現自定義事件。自定義事件背後的概念是建立一個管理事件的物件,讓其他物件監聽那些事件。說簡單點就是我們希望在程式執行的時候,路線可能會有很多,如果程式執行到了一個特殊的地方,我們希望立刻執行使用者註冊的方法裡面的程式碼,執行完畢後再繼續執行,這個過程叫做監聽。

如何自定義事件

第一種方式是自己模擬事件結構, 我們平時監聽事件的時候就是一種觀察者模式,

<input onclick="clickhanler()">
function clickhandler(){
	console.log("ok")
}

handler訂閱了他的點選事件,button是觀察者主體,

第二種方式如下

event = new Event(type,eventInit)

type:建立事件的名稱
eventInit:
"bubbles":可選,Boolean型別,預設值為 false,表示該事件是否冒泡。
"cancelable":可選,Boolean型別,預設值為 false, 表示該事件能否被取消。
"composed":可選,Boolean型別,預設值為 false,指示事件是否會在影子DOM根節點之外 觸發偵聽器。

var event = new Event(type,eventInit)
document.dispatchEvent(event)
//事件也可以任何元素觸發不僅僅document

1:用document.createEvent()建立事件物件

2:initEvent()初始化事件。

3:監聽觸發事件

第三種:

var event = new CustomEvent("build",{detail:"yzq"}) //區別
ele.addEventListener("build",function(e){...}.false)
elem.dispatchEvent(event)

所謂的事件自定義實際跟其他事件同宗同源,只是名字型別不一樣罷了