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


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 Media Queries详细介绍和使用实例
May 08 HTML / CSS
css3实现超炫风车特效
Nov 12 HTML / CSS
CSS3实现滚动条动画效果代码分享
Aug 03 HTML / CSS
HTML5移动端开发遇见的东西
Oct 11 HTML / CSS
让IE9以下版本的浏览器兼容HTML5的方法
Mar 12 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
Oct 15 HTML / CSS
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
Mar 27 HTML / CSS
整理HTML5移动端开发的常用触摸事件
Apr 15 HTML / CSS
html5中的一些标签学习(心得)
Oct 18 HTML / CSS
AmazeUI图片轮播效果的示例代码
Aug 20 HTML / CSS
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
Mar 31 HTML / CSS
详解CSS中的特指度和层叠问题
Jul 15 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
再说下636单管机
2021/03/02 无线电
Zend Framework框架路由机制代码分析
2016/03/22 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
Golang与python线程详解及简单实例
2017/04/27 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
pymysql的简单封装代码实例
2020/01/08 Python
数控专业应届生求职信
2013/11/27 职场文书
工程承诺书怎么写
2014/05/24 职场文书
任命书格式
2014/06/05 职场文书
测控技术自荐信
2014/06/05 职场文书
自我工作评价范文
2015/03/06 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python