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


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 transform的skew属性值图文详解
Jul 21 HTML / CSS
CSS3中使用RGBa来调节透明度的教程
May 09 HTML / CSS
关于 HTML5 的七个传说小结
Apr 12 HTML / CSS
在html5的Canvas上绘制椭圆的几种方法总结
Jan 07 HTML / CSS
深入解析HTML5中的Blob对象的使用
Sep 08 HTML / CSS
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
Mar 22 HTML / CSS
深入理解HTML的FormData对象
May 17 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
Jun 17 HTML / CSS
使用phonegap进行提示操作的具体方法
Mar 30 HTML / CSS
关于html选择框创建占位符的问题
Jun 09 HTML / CSS
CSS控制继承中的height能变为可继承吗
Jun 10 HTML / CSS
CSS中calc(100%-100px)不加空格不生效
May 07 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
thinkphp四种url访问方式详解
2014/11/28 PHP
php二维数组合并及去重复的方法
2015/03/04 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
IE bug table元素的innerHTML
2010/01/11 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
python 文件操作api(文件操作函数)
2016/08/28 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
使用pygame写一个古诗词填空通关游戏
2019/12/03 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
详解Python高阶函数
2020/08/15 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
土木工程专业个人求职信
2013/12/05 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
走群众路线剖析材料
2014/10/09 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL