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事件写法实现代码
Jan 07 Javascript
Javascript 读书笔记索引贴
Jan 11 Javascript
return false,对阻止事件默认动作的一些测试代码
Nov 17 Javascript
JavaScript中Math对象方法使用概述
Jan 02 Javascript
jQuery中children()方法用法实例
Jan 07 Javascript
PHP结合jQuery实现红蓝投票功能特效
Jul 22 Javascript
javascript给span标签赋值的方法
Nov 26 Javascript
最简单的JavaScript图片轮播代码(两种方法)
Dec 18 Javascript
原生JS实现拖拽图片效果
Aug 27 Javascript
js html实现计算器功能
Nov 13 Javascript
p5.js实现动态图形临摹
Oct 23 Javascript
Javascript作用域和作用域链原理解析
Mar 03 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&java(二)
2006/10/09 PHP
apache php模块整合操作指南
2012/11/16 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
JavaScript更改class和id的方法
2008/10/10 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
python引入导入自定义模块和外部文件的实例
2017/07/24 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
现代化办公人员工作的自我评价
2013/10/16 职场文书
岗位说明书范文
2014/05/07 职场文书
新党章的学习心得体会
2014/11/07 职场文书
2014年环保工作总结
2014/11/26 职场文书
失职检讨书大全
2015/01/26 职场文书
体育个人工作总结
2015/02/09 职场文书
事业单位岗位说明书
2015/10/08 职场文书