js实现无刷新监听URL的变化示例代码详解


Posted in Javascript onJune 03, 2020

无刷新改变路由的两种方法通过hash改变路由

代码

window.location.hash='edit'

效果

http://xxxx/#edit

通过history改变路由

  • history.back(): 返回浏览器会话历史中的上一页,跟浏览器的回退按钮功能相同
  • history.forward():指向浏览器会话历史中的下一页,跟浏览器的前进按钮相同
  • history.go(): 可以跳转到浏览器会话历史中的指定的某一个记录页
  • history.pushState()可以将给定的数据压入到浏览器会话历史栈中,该方法接收3个参数,对象,title和一串url。pushState后会改变当前页面url
  • history.replaceState()将当前的会话页面的url替换成指定的数据,replaceState后也会改变当前页面的url

监听url变化

监听hash变化

window.onhashchange=function(event){
 console.log(event);
}
//或者
window.addEventListener('hashchange',function(event){
 console.log(event);
})

监听back/forward/go

如果是history.back(),history.forward()、history.go()那么会触发popstate事件

window.addEventListener('popstate', function(event) {
  console.log(event);
})

但是,history.pushState()和history.replaceState()不会触发popstate事件,所以需要自己手动增加事件

监听pushState/replaceState

history.replaceState和pushState不会触发popstate事件,那么如何监听这两个行为呢。可以通过在方法里面主动的去触发popstate事件。另一种就是在方法中创建一个新的全局事件。

改造

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');

监听

window.addEventListener('pushState', function(e) {
 console.log('change pushState');
});
window.addEventListener('replaceState', function(e) {
 console.log('change replaceState');
});

总结

到此这篇关于js如何无刷新监听URL的变化的文章就介绍到这了,更多相关js 无刷新监听url变化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript初学者应注意的七个细节详细介绍
Dec 27 Javascript
jquery 动态创建元素的方式介绍及应用
Apr 21 Javascript
JavaScript中按位“异或”运算符使用介绍
Mar 14 Javascript
Iframe实现跨浏览器自适应高度解决方法
Sep 02 Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 Javascript
浅谈mint-ui loadmore组件注意的问题
Nov 08 Javascript
js解决软键盘遮挡输入框的问题分享
Dec 19 Javascript
jquery应用实例分享_实现手风琴特效
Feb 01 jQuery
mpvue微信小程序多列选择器用法之省份城市选择的实现
Mar 07 Javascript
JS实现li标签的删除
Apr 12 Javascript
es6中使用map简化复杂条件判断操作实例详解
Feb 19 Javascript
vue项目实现多语言切换的思路
Sep 17 Javascript
JQuery实现折叠式菜单的详细代码
Jun 03 #jQuery
JavaScript字符和ASCII实现互相转换
Jun 03 #Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
Jun 03 #Javascript
JavaScript监听键盘事件代码实现
Jun 03 #Javascript
微信小程序自定义顶部组件customHeader的示例代码
Jun 03 #Javascript
深入分析jQuery.one() 函数
Jun 03 #jQuery
layui实现显示数据表格、搜索和修改功能示例
Jun 03 #Javascript
You might like
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
JAVA/JSP学习系列之二
2006/10/09 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
PHP 工厂模式使用方法
2010/05/18 PHP
php异常处理方法实例汇总
2015/06/24 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
Smarty保留变量用法分析
2016/05/23 PHP
小议Javascript中的this指针
2010/03/18 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
cookie的secure属性详解
2015/04/08 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
利用css+原生js制作简单的钟表
2020/04/07 Javascript
深入浅出ES6之let和const命令
2016/08/25 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
angular select 默认值设置方法
2017/06/23 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
深入讲解Python编程中的字符串
2015/10/14 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
ubuntu上安装python的实例方法
2019/09/30 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
python 装饰器的基本使用
2021/01/13 Python
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
团日活动总结范文
2014/04/25 职场文书
新法人代表任命书
2014/06/06 职场文书