vue项目中监听手机物理返回键的实现


Posted in Javascript onJanuary 18, 2020

背景:项目中有一个场景要监听android手机物理返回键,但是app和js的中间件又没提供这个事件的监听,只能百度纯js实现了

第一步:

xback.js

;!function(pkg, undefined){
 var STATE = 'x-back';
 var element;
 var onPopState = function(event){
  event.state === STATE && fire();
 }
 var record = function(state){
  history.pushState(state, null, location.href);
 }
 var fire = function(){
  var event = document.createEvent('Events');
  event.initEvent(STATE, false, false);
  element.dispatchEvent(event);
 }
 var listen = function(listener){
   element.addEventListener(STATE, listener, false);
  }
 ;!function(){
  element = document.createElement('span');
  window.addEventListener('popstate', onPopState);
  this.listen = listen;
  this.record = record(STATE);
  record(STATE);
 }.call(window[pkg] = window[pkg] || {});
}('XBack');

第二步:

加载xback.js文件

<remote-script src="../js/xback.js" @load="loadXBack"></remote-script>

自定义组件remote-script可以参考我另外的一篇文章:https://3water.com/article/178777.htm

第三步:

监听返回键事件

methods: {
  // JavaScript监听手机物理返回键
   loadXBack () {
    window.XBack.listen(() => {
     this.dialog = this.$createDialog({
      type: 'confirm',
      content: `确定返回吗?`,
      confirmButton: {
       text: '确定',
       active: true,
       disabled: false
      },
      cancelButton: {
       text: '取消',
       active: false,
       disabled: false
      },
      onConfirm: () => {
       this.dialog.hide()
       this.close()
      },
      onCancel: () => {
       this.dialog.hide()
       window.history.pushState('x-back', null, window.location.href)
      }
     })
     this.dialog.show()
    })
   },
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中的屏蔽的使用示例
Jul 30 Javascript
Javascript 多浏览器兼容总结(实战经验)
Oct 30 Javascript
js完美解决IE6不支持position:fixed的bug
Apr 24 Javascript
Bootstrap CSS组件之输入框组
Dec 17 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
Dec 19 Javascript
微信小程序 图片绝对定位(背景图片)
Apr 05 Javascript
JavaScript类的继承方法小结【组合继承分析】
Jul 11 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
微信小程序页面上下滚动效果
Nov 18 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
Nov 08 Javascript
24行JavaScript代码实现Redux的方法实例
Nov 17 Javascript
通过Kettle自定义jar包供javascript使用
Jan 29 Javascript
vue组件内部引入外部js文件的方法
Jan 18 #Javascript
Node.js实现批量下载图片简单操作示例
Jan 18 #Javascript
vue实现微信浏览器左上角返回按钮拦截功能
Jan 18 #Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
Jan 18 #Javascript
JS数组方法slice()用法实例分析
Jan 18 #Javascript
JS实现横向轮播图(中级版)
Jan 18 #Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 #Javascript
You might like
深入了解php4(1)--回到未来
2006/10/09 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
jQuery的三种$()
2009/12/30 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
构建Python包的五个简单准则简介
2015/06/15 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
基本款天堂:Everlane
2017/05/13 全球购物
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
仓库组长岗位职责
2014/01/29 职场文书
大型车展策划方案
2014/02/01 职场文书
致全体运动员广播稿
2014/02/01 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
师德师风个人自我剖析材料
2014/09/27 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android