微信浏览器左上角返回按钮拦截功能


Posted in HTML / CSS onNovember 21, 2017

在微信公众号开发中,有时需要对浏览器左上角返回按钮进行拦截处理相关的页面逻辑,而并不是让页面直接返回上一页,之前在这个细节点上的一直实现得不是很好。但看到京东购物公众号上的效果却实现得非常好,所以自己也开始了这方面的尝试。京东的效果如下图:

微信浏览器左上角返回按钮拦截功能

从上图京东购物效果上来看,在点击搜索拉起一个搜索界面,然后点击左上角反回,只是将搜索界面收起,而页面没有重新像读取进度条一样去返回,而我页面需要的正是这样的效果,下面就用vue来做一个这个过程的demo吧。

前提:微信左上角的返回按钮其实无法被拦截,但是可以监听到这个返回事件。

思路:要想真正拦截返回事件,可以当前页面先向window.history中添加一个记录(实际只是在历史记录堆栈中添加一条记录pushState,浏览器并不会真正去加载这个路径),当点击返回时,监听到返回事件处理自己想处理的逻辑,反正微信它是一定要执行返回,刚添加的那条记录就会从window.history拿出并将此路径替换当前页面路径。注意:这里只是路径的替换,只是将路径换了个名字,并不是会真正去加载这个路径。

实现:demo里建立了两个vue页面(first 和 two),第一个页面跳转到到第二个页面。然后在第二个页面弹出一个蒙层,这时点击左上角返回时,并不是返回first,而是先将蒙层消失,再次点击返回时才是返回上一页;

实现效果如下:

微信浏览器左上角返回按钮拦截功能

 
 

相关代码讲解:

1 在第二个页面mounted方法中加入,添加监听返回事件方法。当返回按钮被点击时,这里让弹出的蒙层隐藏;

mounted() {
    let that = this;
    // 添加返回事件监听
    window.addEventListener("popstate", function(e) {
      that.isShowTestDiv = false;
    }, false);
  },

2 监听蒙层,当它显示时,在window.history(历史堆栈)中添加一条记录;

watch: {
    isShowTestDiv: function(newVal, oldVal) {
      if (newVal === true) {
        this.pushHistory();
      }
    }
  }
    pushHistory() { // 修改history
      var state = {
        title: "",
        url: "/two" // 这个url可以随便填,只是为了不让浏览器显示的url地址发生变化,对页面其实无影响
      };
      window.history.pushState(state, state.title, state.url);
    },

3 最后弹出的蒙层如果用户点蒙层上相关操作将蒙层关闭,那么要手动将自己添加的那条记录从history中移除,在vue将路由back一下即可。

helloClick() { // 点击弹出来的hello蒙板
      this.isShowTestDiv = false;
      this.$router.back(); // 将添加记录从history中移除
    }

    demo地址

gitHub: https://github.com/LiJinShi/wechat_back_vue

总结

以上所述是小编给大家介绍的微信浏览器左上角返回按钮拦截功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

HTML / CSS 相关文章推荐
CSS3支持IE6, 7, and 8的边框border属性
Dec 28 HTML / CSS
纯CSS3制作的鼠标悬停时边框旋转
Jan 03 HTML / CSS
css3新单位vw、vh的使用教程
Mar 23 HTML / CSS
css3实现元素环绕中心点布局的方法示例
Jan 15 HTML / CSS
Html5无刷新修改browser Url的方法
Jan 15 HTML / CSS
HTML5中drawImage用法分析
Dec 01 HTML / CSS
HTML5拖放效果的实现代码
Nov 17 HTML / CSS
LocalStorage记住用户和密码功能
Jul 24 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
Aug 17 HTML / CSS
HTML5新标签兼容——> 的两种方法
Sep 12 HTML / CSS
css height属性中的calc方法详解
Jun 03 HTML / CSS
CSS几步实现赛博朋克2077风格视觉效果
Jun 16 HTML / CSS
html5使用Canvas绘图的使用方法
Nov 21 #HTML / CSS
详解HTML5新增标签
Nov 27 #HTML / CSS
详解HTML5中垂直上下居中的解决方案
Dec 20 #HTML / CSS
HTML5混合开发二维码扫描以及调用本地摄像头
Dec 27 #HTML / CSS
HTML5实现Notification API桌面通知功能
Mar 02 #HTML / CSS
HTML5 canvas实现雪花飘落特效
Mar 08 #HTML / CSS
HTML5 用动画的表现形式装载图像
Mar 08 #HTML / CSS
You might like
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
ajax异步请求详解
2017/01/06 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
javascript 中的try catch应用总结
2017/04/01 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
vue获取input输入值的问题解决办法
2017/10/17 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
pymssql ntext字段调用问题解决方法
2008/12/17 Python
Python读写Excel文件的实例
2013/11/01 Python
python字典get()方法用法分析
2015/04/17 Python
简单解析Django框架中的表单验证
2015/07/17 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
爸爸的花儿落了教学反思
2014/02/20 职场文书
送餐员岗位职责范本
2014/02/21 职场文书
周年庆典主持词
2014/04/02 职场文书
初三开学计划书
2014/04/27 职场文书
党支部考察意见范文
2015/06/02 职场文书
2015年七夕情人节感言
2015/08/03 职场文书