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 相关文章推荐
JS正则中的RegExp对象对象
Nov 07 Javascript
node.js中的fs.fsyncSync方法使用说明
Dec 15 Javascript
jquery使用经验小结
May 20 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
BootStrap智能表单demo示例详解
Jun 13 Javascript
Vue.js实现文章评论和回复评论功能
May 30 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
Jun 16 jQuery
微信小程序实现轮播图效果
Sep 07 Javascript
Bootstrap table表格初始化表格数据的方法
Jul 25 Javascript
vue组件横向树实现代码
Aug 02 Javascript
js 递归json树实现根据子id查父id的方法分析
Nov 08 Javascript
d3.js 地铁轨道交通项目实战
Nov 27 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
php连接Access数据库错误及解决方法
2013/06/20 PHP
PHP SOCKET编程详解
2015/05/22 PHP
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
jquery得到font-size属性值实现代码
2013/09/30 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python网络编程 Python套接字编程
2017/09/13 Python
Django如何实现内容缓存示例详解
2017/09/24 Python
python正则中最短匹配实现代码
2018/01/16 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
教学大赛获奖感言
2014/01/15 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
教师年度个人总结
2015/02/11 职场文书
新员工入职感想
2015/08/07 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis