在做H5頁(yè)面的時(shí)候娶吞,為了更好的模擬APP操作械姻,提高用戶(hù)體驗(yàn)妒蛇,某些頁(yè)面彈出提示框的時(shí)候,點(diǎn)擊返回鍵隱藏提示框而不是返回到上一個(gè)頁(yè)面
或者在做登錄的時(shí)候吏奸,從A→B→C陶耍,我需要從C直接回到A而不經(jīng)過(guò)B奋蔚,這個(gè)時(shí)候烈钞,就要攔截返回鍵自己來(lái)定義事件
總的來(lái)說(shuō),vue也是js毯欣,離不開(kāi)js
mounted() {
// 按需使用:A→B→C就需要頁(yè)面一進(jìn)來(lái)的時(shí)候,就添加一個(gè)歷史記錄
window.history.pushState(null, null, document.URL);
// 給window添加一個(gè)popstate事件酗钞,攔截返回鍵腹忽,執(zhí)行this.onBrowserBack事件,addEventListener需要指向一個(gè)方法
window.addEventListener("popstate", this.onBrowserBack, false);
},
destroyed() {
// 當(dāng)頁(yè)面銷(xiāo)毀必須要移除這個(gè)事件砚作,vue不刷新頁(yè)面窘奏,不移除會(huì)重復(fù)執(zhí)行這個(gè)事件
window.removeEventListener("popstate", this.onBrowserBack, false);
},
watch: {
// 彈框監(jiān)聽(tīng),當(dāng)彈框顯示的時(shí)候偎巢,pushState添加一個(gè)歷史蔼夜,供返回鍵使用
PopupShow: {
handler(newVal, oldVal) {
if (newVal.Terms === true) {
window.history.pushState(null, null, document.URL);
}
},
deep: true
}
},
methods: {
onBrowserBack() {
// 這里寫(xiě)點(diǎn)擊返回鍵時(shí)候的事件
// 比如判斷需求執(zhí)行back()或者go(-2)或者PopupShow=false隱藏彈框
}
}
popstate事件需要每個(gè)頁(yè)面單獨(dú)寫(xiě),不適合寫(xiě)成公共方法