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


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实例教程 一款纯css3实现的发光屏幕旋转特效
Dec 07 HTML / CSS
使用CSS3制作响应式导航菜单的方法
Jul 12 HTML / CSS
基于CSS3 animation动画属性实现轮播图效果
Sep 12 HTML / CSS
CSS3 Calc实现滚动条出现页面不跳动问题
Sep 14 HTML / CSS
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
Nov 16 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
Jan 27 HTML / CSS
利用HTML5 Canvas API绘制矩形的超级攻略
Mar 21 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
Dec 19 HTML / CSS
Html5 video标签视频的最佳实践
Feb 26 HTML / CSS
Canvas如何做个雪花屏版404的实现
Sep 25 HTML / CSS
CSS 一行代码实现头像与国旗的融合
Oct 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执行zip与rar解压缩方法实现代码
2010/12/05 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
php数字游戏 计算24算法
2012/06/10 PHP
浅析Mysql 数据回滚错误的解决方法
2013/08/05 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
php中in_array函数用法探究
2014/11/25 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
jquery解析XML字符串和XML文件的方法说明
2014/02/21 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
express 项目分层实践详解
2018/12/10 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
python八大排序算法速度实例对比
2017/12/06 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
Python中如何导入类示例详解
2019/04/17 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
Python使用Matlab命令过程解析
2020/06/04 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
酒店保安领班职务说明书
2014/03/04 职场文书
班组长竞聘书
2014/03/31 职场文书
委托书的格式
2014/08/01 职场文书
安全先进个人材料
2014/12/29 职场文书
特此通知格式
2015/04/27 职场文书
社区低保工作总结2015
2015/07/23 职场文书
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技