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 快捷键设置实现代码
Mar 13 Javascript
jquery 操作DOM案例代码分享
Apr 05 Javascript
js实现一个省市区三级联动选择框代码分享
Mar 06 Javascript
javascript使用输出语句实现网页特效代码
Aug 06 Javascript
javascript数据结构之双链表插入排序实例详解
Nov 25 Javascript
基于jquery实现瀑布流布局
Jun 28 Javascript
jQuery基础知识点总结(必看)
May 31 Javascript
实现隔行换色效果的两种方式【实用】
Nov 27 Javascript
Bootstrap 模态框(Modal)带参数传值实例
Aug 20 Javascript
js匿名函数使用&传参(实例)
Sep 08 Javascript
微信小程序多音频播放进度条问题
Aug 28 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
Sep 20 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伪造referer实例代码
2008/09/20 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
概述BootStrap中role="form"及role作用角色
2016/12/08 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
帝国cms首页列表页实现点赞功能
2017/10/30 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
vue实现提示保存后退出的方法
2018/03/15 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
python爬虫基本知识
2018/03/05 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
python中对_init_的理解及实例解析
2019/10/11 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
教师推荐信范文
2013/11/24 职场文书
音乐幼师求职信
2014/07/09 职场文书
毕业生找工作求职信
2014/08/05 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技