官术网_书友最值得收藏!

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事件,這在某些特定場景中會有具體應用。

主站蜘蛛池模板: 毕节市| 抚顺市| 西平县| 喀什市| 敖汉旗| 酒泉市| 碌曲县| 奎屯市| 略阳县| 榆中县| 会泽县| 梅州市| 九江县| 巴林左旗| 河北省| 连云港市| 大宁县| 清水县| 灯塔市| 仪陇县| 高平市| 封开县| 昌黎县| 诸城市| 富蕴县| 枣强县| 江安县| 丹寨县| 延吉市| 湾仔区| 上虞市| 舞阳县| 南漳县| 屯留县| 克什克腾旗| 定边县| 阳高县| 深州市| 呼伦贝尔市| 田阳县| 伊川县|