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压缩混淆工具
May 16 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
Feb 10 Javascript
jquery select动态加载选择(兼容各种浏览器)
Feb 01 Javascript
JS中自定义定时器让它在某一时刻执行
Sep 02 Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
Nov 21 Javascript
jQuery弹出遮罩层效果完整示例
Sep 13 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 Javascript
JavaScript函数的4种调用方法实例分析
Mar 05 Javascript
js实现筛选功能
Nov 24 Javascript
深入浅析React中diff算法
May 19 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
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
JS中style属性
2006/10/11 Javascript
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
js对字符的验证方法汇总
2015/02/04 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
Python基础中所出现的异常报错总结
2016/11/19 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
Python查看微信撤回消息代码
2018/06/07 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
英国最大的香水商店:The Fragrance Shop
2018/07/06 全球购物
九州传奇上机题
2014/07/10 面试题
如何安装ruby on rails
2014/02/09 面试题
建设幸福中国演讲稿
2014/09/11 职场文书
自主招生自荐信格式
2015/03/04 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL