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 EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
Oct 06 Javascript
深入探讨JavaScript String对象
Mar 09 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
Dec 24 Javascript
jquery mobile界面数据刷新的实现方法
May 28 Javascript
js中window.open的参数及注意注意事项
Jul 06 Javascript
JavaScript的==运算详解
Jul 20 Javascript
使用JS中的exec()方法构造正则表达式验证
Aug 01 Javascript
D3.js实现柱状图的方法详解
Sep 21 Javascript
React Native中TabBarIOS的简单使用方法示例
Oct 13 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
Dec 05 Javascript
微信小程序批量上传图片到七牛(推荐)
Dec 19 Javascript
深入详解JS函数的柯里化
Jun 09 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
短波问题解答
2021/02/28 无线电
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
javascript IFrame 强制刷新代码
2009/07/23 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
浅谈Vue 初始化性能优化
2017/08/31 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
python如何爬取动态网站
2020/09/09 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
岗位职责风险防控
2014/02/18 职场文书
银行求职信
2014/05/31 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
java实现web实时消息推送的七种方案
2022/07/23 Java/Android