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 相关文章推荐
基于JQuery实现的类似购物商城的购物车
Dec 06 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
Dec 31 Javascript
JavaScript中的cacheStorage使用详解
Jul 29 Javascript
微信小程序 自己制作小组件实例详解
Dec 22 Javascript
详解Javascript几种跨域方式总结
Feb 27 Javascript
JS仿JQuery选择器功能
Mar 08 Javascript
vue与TypeScript集成配置最简教程(推荐)
Oct 17 Javascript
10行原生JS实现文字无缝滚动(超简单)
Jan 02 Javascript
详解angularjs 学习之 scope作用域
Jan 15 Javascript
通过layer实现可输入的模态框的例子
Sep 27 Javascript
vue监听滚动事件的方法
Dec 21 Vue.js
动态实现element ui的el-table某列数据不同样式的示例
Jan 22 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二分法在IP地址查询中的应用
2008/08/12 PHP
php的curl实现get和post的代码
2008/08/23 PHP
小文件php+SQLite存储方案
2010/09/04 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
google地图的路线实现代码
2009/08/20 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
Django工程的分层结构详解
2019/07/18 Python
Python接口自动化测试的实现
2020/08/28 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
计算机专业个人求职自荐信
2013/09/21 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
2015年母亲节寄语
2015/03/23 职场文书
高中地理教学反思
2016/02/19 职场文书