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


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 伪类选择器 nth-child()说明
Jul 10 HTML / CSS
CSS3 特效范例整理
Aug 22 HTML / CSS
一款纯css3实现的鼠标经过按钮特效教程
Nov 09 HTML / CSS
CSS3 text-shadow实现文字阴影效果
Feb 24 HTML / CSS
css3动画效果小结(推荐)
Jul 25 HTML / CSS
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
Oct 29 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
Mar 14 HTML / CSS
html5 canvas绘制矩形和圆形的实例代码
Jun 16 HTML / CSS
HTML5 canvas基本绘图之绘制曲线
Jun 27 HTML / CSS
HTML5开发动态音频图的实现
Jul 02 HTML / CSS
Canvas如何做个雪花屏版404的实现
Sep 25 HTML / CSS
使用HBuilder制作一个简单的HTML5网页
Jul 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
如何对PHP程序中的常见漏洞进行攻击
2006/10/09 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
YII路径的用法总结
2014/07/09 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python爬取三国演义的实现方法
2016/09/12 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
2020/08/05 Python
django有哪些好处和优点
2020/09/01 Python
Python类型转换的魔术方法详解
2020/12/23 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
美国在线宠物商店:Chewy
2019/01/12 全球购物
开业主持词
2014/03/21 职场文书
国际金融专业自荐信
2014/07/05 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
redis数据一致性的实现示例
2022/03/18 Redis
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript