- 深入理解React Router:從原理到實踐
- 李楊韜
- 551字
- 2021-04-16 16:10:38
1.4.3 手動觸發(fā)事件
對于popstate事件,如果調(diào)用history.pushState方法,則history.replaceState方法不會被觸發(fā),僅在移動棧指針時才會觸發(fā)popstate事件。對于開發(fā)者來說,這缺少一定的控制;不過通過dispatchEvent方法,也能實現(xiàn)不移動棧指針便可控制popstate事件的觸發(fā)。調(diào)用dispatchEvent方法時,dispatchEvent方法返回值為事件的取消狀態(tài),其簽名為

其接收一個事件實例作為入?yún)ⅲ琫vent是要被派發(fā)的事件對象。target被用來初始化事件和決定將會觸發(fā)的目標。當該事件是可取消的(cancelable為true)且至少一個該事件的事件處理方法調(diào)用了event.preventDefault時,調(diào)用dispatchEvent的返回值為false;否則返回true。
對于如window.addEventListener('popstate',handlePopState)監(jiān)聽的popstate事件,則可在不移動棧指針的情況下調(diào)用window.dispatchEvent手動觸發(fā)。

event事件通過實例化PopStateEvent對象得到,并傳入事件的type為popstate:


對于IE瀏覽器,PopStateEvent的類型為object,不能通過new實例化得到對應的event實例。event實例可通過createEvent創(chuàng)建,事件類型可通過initEvent設置。initEvent支持3個參數(shù):

這3個參數(shù)分別表示事件名稱、是否可以冒泡、是否阻止事件的默認操作。在IE瀏覽器中,popstate事件的觸發(fā)方式為

在IE瀏覽器中,Event類型為對象,而其他瀏覽器如Chrome,Event類型為函數(shù),可兼容寫法如下:

同理,對于hashchange事件,也可實現(xiàn)對應的手動觸發(fā)方式:


對于手動觸發(fā)的hashchange事件,其不受當前hash的影響。我們在1.3節(jié)中介紹過,前后兩次設置相同的location.hash值不會觸發(fā)hashchange事件,但對于手動觸發(fā)的方式來說,其可反復觸發(fā)hashchange事件。

此方法即使不移動棧指針,也會觸發(fā)hashchange事件,這在某些特定場景中會有具體應用。
- Java異步編程實戰(zhàn)
- Ext JS Data-driven Application Design
- Python從入門到精通(精粹版)
- Quarkus實踐指南:構建新一代的Kubernetes原生Java微服務
- JavaScript 程序設計案例教程
- HTML5從入門到精通 (第2版)
- 深入理解Android:Wi-Fi、NFC和GPS卷
- 零基礎C#學習筆記
- Python 3快速入門與實戰(zhàn)
- Python數(shù)據(jù)預處理技術與實踐
- 3D Printing Designs:Fun and Functional Projects
- Python程序設計教程
- 青少年編程魔法課堂:Python圖形化創(chuàng)意編程
- 計算機邏輯設計
- Machine Learning with R Cookbook