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


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 相关文章推荐
移动端rem布局的两种实现方法
Jan 03 HTML / CSS
CSS3 绘制BMW logo实的现代码
Apr 25 HTML / CSS
纯CSS3实现的8种Loading动画效果
Jul 05 HTML / CSS
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
Jan 17 HTML / CSS
使用CSS3实现SVG路径描边动画效果入门教程
Oct 21 HTML / CSS
CSS实现进度条和订单进度条的示例
Nov 05 HTML / CSS
HTML5 Web 存储详解
Sep 16 HTML / CSS
利用简洁的图片预加载组件提升html5移动页面的用户体验
Mar 11 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
Jul 04 HTML / CSS
教你使用Canvas处理图片的方法
Nov 28 HTML / CSS
Html5 canvas画图白板踩坑
Jun 01 HTML / CSS
css3中2D转换之有趣的transform形变效果
Feb 24 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读取MySQL数据代码
2008/06/05 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
使用 PHPStorm 开发 Laravel
2015/03/24 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
jQuery1.4.2与老版本json格式兼容的解决方法
2011/02/12 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
Python中的生成器和yield详细介绍
2015/01/09 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
初中校园广播稿
2014/02/02 职场文书
打架检讨书2000字
2014/02/22 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
大一新生学期自我评价
2014/04/09 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
趣味运动会简讯
2015/07/20 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技