js實(shí)現(xiàn)無(wú)刷新監(jiān)聽(tīng)URL的變化示例代碼詳解
無(wú)刷新改變路由的兩種方法通過(guò)hash改變路由
代碼
window.location.hash='edit'
效果
通過(guò)history改變路由
- history.back(): 返回瀏覽器會(huì)話歷史中的上一頁(yè),跟瀏覽器的回退按鈕功能相同
- history.forward():指向?yàn)g覽器會(huì)話歷史中的下一頁(yè),跟瀏覽器的前進(jìn)按鈕相同
- history.go(): 可以跳轉(zhuǎn)到瀏覽器會(huì)話歷史中的指定的某一個(gè)記錄頁(yè)
- history.pushState()可以將給定的數(shù)據(jù)壓入到瀏覽器會(huì)話歷史棧中,該方法接收3個(gè)參數(shù),對(duì)象,title和一串url。pushState后會(huì)改變當(dāng)前頁(yè)面url
- history.replaceState()將當(dāng)前的會(huì)話頁(yè)面的url替換成指定的數(shù)據(jù),replaceState后也會(huì)改變當(dāng)前頁(yè)面的url
監(jiān)聽(tīng)url變化
監(jiān)聽(tīng)hash變化
window.onhashchange=function(event){
console.log(event);
}
//或者
window.addEventListener('hashchange',function(event){
console.log(event);
})
監(jiān)聽(tīng)back/forward/go
如果是history.back(),history.forward()、history.go()那么會(huì)觸發(fā)popstate事件
window.addEventListener('popstate', function(event) {
console.log(event);
})
但是,history.pushState()和history.replaceState()不會(huì)觸發(fā)popstate事件,所以需要自己手動(dòng)增加事件
監(jiān)聽(tīng)pushState/replaceState
history.replaceState和pushState不會(huì)觸發(fā)popstate事件,那么如何監(jiān)聽(tīng)這兩個(gè)行為呢??梢酝ㄟ^(guò)在方法里面主動(dòng)的去觸發(fā)popstate事件。另一種就是在方法中創(chuàng)建一個(gè)新的全局事件。
改造
const _historyWrap = function(type) {
const orig = history[type];
const e = new Event(type);
return function() {
const rv = orig.apply(this, arguments);
e.arguments = arguments;
window.dispatchEvent(e);
return rv;
};
};
history.pushState = _historyWrap('pushState');
history.replaceState = _historyWrap('replaceState');
監(jiān)聽(tīng)
window.addEventListener('pushState', function(e) {
console.log('change pushState');
});
window.addEventListener('replaceState', function(e) {
console.log('change replaceState');
});
總結(jié)
到此這篇關(guān)于js如何無(wú)刷新監(jiān)聽(tīng)URL的變化的文章就介紹到這了,更多相關(guān)js 無(wú)刷新監(jiān)聽(tīng)url變化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JS如何監(jiān)聽(tīng)div的resize事件詳解
- JavaScript 監(jiān)聽(tīng)組合按鍵思路及代碼實(shí)現(xiàn)
- JavaScript如何實(shí)現(xiàn)監(jiān)聽(tīng)鍵盤(pán)輸入和鼠標(biāo)監(jiān)點(diǎn)擊
- NodeJS多種創(chuàng)建WebSocket監(jiān)聽(tīng)的方式(三種)
- JavaScript監(jiān)聽(tīng)鍵盤(pán)事件代碼實(shí)現(xiàn)
- 使用JS監(jiān)聽(tīng)鍵盤(pán)按下事件(keydown event)
- js 實(shí)現(xiàn)watch監(jiān)聽(tīng)數(shù)據(jù)變化的代碼
- javascript事件監(jiān)聽(tīng)與事件委托實(shí)例詳解
- 如何用JS實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)監(jiān)聽(tīng)
相關(guān)文章
原生JavaScript實(shí)現(xiàn)Ajax異步請(qǐng)求
ajax現(xiàn)在是一種非常流行的技術(shù),現(xiàn)在雖然可以利用JQuery或者一些第三方插件甚至微軟提供的一些控件可以方面的實(shí)現(xiàn)ajax功能,但是明白其原理也是非常重要的,下面是來(lái)使用純javascript實(shí)現(xiàn)獲取服務(wù)器端的功能來(lái)展示如何使用純javascript實(shí)現(xiàn)ajax功能,以弄清其原理.2017-11-11
JavaScript實(shí)現(xiàn)時(shí)間格式的切割與轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了使用JavaScript實(shí)現(xiàn)時(shí)間格式的切割與轉(zhuǎn)換的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-04-04
js對(duì)象實(shí)現(xiàn)數(shù)據(jù)分頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了js對(duì)象實(shí)現(xiàn)數(shù)據(jù)分頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
Bootstrap的popover(彈出框)2秒后定時(shí)消失的實(shí)現(xiàn)代碼
Bootstrap Popover(彈出框)是使用定制的 Jquery 插件創(chuàng)建的。它可以用來(lái)顯示任何元素的一些信息。這篇文章主要介紹了Bootstrap的popover(彈出框)2秒后定時(shí)消失功能,需要的朋友參考下2017-02-02
js實(shí)現(xiàn)json數(shù)組分組合并操作示例
這篇文章主要介紹了js實(shí)現(xiàn)json數(shù)組分組合并操作,涉及javascript針對(duì)json數(shù)組的遍歷、判斷、添加、賦值等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
javascript Onunload與Onbeforeunload使用小結(jié)
Onunload,onbeforeunload都是在刷新或關(guān)閉時(shí)調(diào)用,可以在<script>腳本中通過(guò)window.onunload來(lái)指定或者在<body>里指定。區(qū)別在于onbeforeunload在onunload之前執(zhí)行,它還可以阻止onunload的執(zhí)行。2009-12-12
CSS3+JavaScript實(shí)現(xiàn)翻頁(yè)幻燈片效果
這篇文章主要介紹了CSS3+JavaScript實(shí)現(xiàn)翻頁(yè)幻燈片效果,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06
ECMA5數(shù)組的新增方法有哪些及forEach()模仿實(shí)現(xiàn)
這篇文章主要介紹了ECMA5數(shù)組的新增方法有哪些及forEach()模仿實(shí)現(xiàn),需要的朋友可以參考下2015-11-11

