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所必须要知道的一些
Mar 07 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
使用jQuery加载html页面到指定的div实现方法
Jul 13 Javascript
详解Javascript中的原型OOP
Oct 12 Javascript
Bootstrap基本组件学习笔记之分页(12)
Dec 08 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
xmlplus组件设计系列之图标(ICON)(1)
May 05 Javascript
Vue.js实现列表清单的操作方法
Nov 15 Javascript
JS实现移动端触屏拖拽功能
Jul 31 Javascript
JS基础之逻辑结构与循环操作示例
Jan 19 Javascript
vue通过接口直接下载java生成好的Excel表格案例
Oct 26 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
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
python 不关闭控制台的实现方法
2011/10/23 Python
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
详解python里的命名规范
2018/07/16 Python
Python unittest单元测试框架总结
2018/09/08 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
详解python pandas 分组统计的方法
2019/07/30 Python
python 实现兔子生兔子示例
2019/11/21 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
Python pip使用超时问题解决方案
2020/08/03 Python
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
英国知名化妆品网站:Revolution Beauty(原TAM Beauty)
2018/02/28 全球购物
教师党的群众路线对照检查材料
2014/09/24 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
党小组鉴定意见
2015/06/02 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
使用tensorflow 实现反向传播求导
2021/05/26 Python