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


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 background属性调整增强介绍
Dec 18 HTML / CSS
浅谈CSS3动画的回调处理
Jul 21 HTML / CSS
从一次项目重构说起CSS3自定义变量在项目的使用方法
Mar 01 HTML / CSS
HTML5仿手机微信聊天界面
Mar 18 HTML / CSS
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
Jul 19 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
Aug 28 HTML / CSS
html5用video标签流式加载的实现
May 20 HTML / CSS
html5实现九宫格抽奖可固定抽中某项奖品
Jun 15 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
Jun 23 HTML / CSS
canvas实现滑动验证的实现示例
Aug 11 HTML / CSS
AmazeUI 网格的实现示例
Aug 13 HTML / CSS
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
Jul 16 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 ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
jquery replace方法去空格
2017/05/08 jQuery
原生JS封装animate运动框架的实例
2017/10/12 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
python实现飞机大战小游戏
2019/11/08 Python
Python实现名片管理系统
2020/02/14 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
python ssh 执行shell命令的示例
2020/09/29 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
小班评语大全
2014/05/04 职场文书
单位委托书怎么写
2014/08/02 职场文书
委托书的写法
2014/08/30 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
药店采购员岗位职责
2014/09/30 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫