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


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.0 图形构成实例练习一
Mar 19 HTML / CSS
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
Oct 10 HTML / CSS
利用SVG和CSS3来实现一个炫酷的边框动画
Jul 22 HTML / CSS
CSS3 仿微信聊天小气泡实例代码
Apr 05 HTML / CSS
css3 flex实现div内容水平垂直居中的几种方法
Mar 27 HTML / CSS
HTML5标签小集
Aug 02 HTML / CSS
HTML5之SVG 2D入门9—蒙板及mask元素介绍与应用
Jan 30 HTML / CSS
html标签之Object和EMBED标签详解
Jul 04 HTML / CSS
HTML5里的placeholder属性使用实例和美化显示效果的方法
Apr 23 HTML / CSS
HTML5新标签兼容——> 的两种方法
Sep 12 HTML / CSS
奇妙的 CSS shapes(CSS图形)
Apr 05 HTML / CSS
CSS3实现的水平标题菜单
Apr 14 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
用libTemplate实现静态网页的生成
2006/10/09 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
2013/04/13 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
用JS控制回车事件的代码
2011/02/20 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
js获取form的方法
2015/05/06 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
python实现图片处理和特征提取详解
2017/11/13 Python
目前最全的python的就业方向
2018/06/05 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
会计找工作求职信范文
2013/12/09 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
英文投诉信格式
2015/07/03 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android