Vue实现摇一摇功能(兼容ios13.3以上)


Posted in Vue.js onJanuary 26, 2021

最近做了个摇一摇类似的功能,使用的是shake.js,但在ios13.3之前的版本中可以触发摇一摇,之后的版本需要兼容,需要制作一个让用户能手动点击的弹框,才能使用户授权动作与方向的权限。(需使用https协议)

Vue实现摇一摇功能(兼容ios13.3以上)

<van-popup v-model="isTip" class="popInfo" :close-on-click-overlay="false">
 <div class="mainBody">
 <h3 class="systemTip">温馨提示</h3>
 <div class="confirm">
 由于ios系统需要手动获取访问动作与方向的权限,为保障游戏的正常进行,请在访问提示中点击允许。
 </div>
 </div>
 <button class="bottomButton" @click="handleInit">
 知道了
 </button>
</van-popup>

shake.js

//引入shake.js
created(){
 this.initShake()
 const isAction = JSON.parse(localStorage.getItem('getAction'))
 var ua = navigator.userAgent.toLowerCase();
 if(ua.indexOf("like mac os x") > 0){
 var reg = /os [\d._]*/gi ;
 var verinfo = ua.match(reg) ;
 var version = (verinfo+"").replace(/[^0-9|_.]/ig,"").replace(/_/ig,".");
 if (parseFloat(version) >= 13.3 && !isAction){
 localStorage.setItem("getAction",true)
 this.isTip = true
 }
 }
},
methods:{
 initShake(){
 this.myShakeEvent = new Shake({
 threshold: 15, // 摇动阈值
 timeout: 1000 // 事件发生频率,是可选值
 });
 this.myShakeEvent.start();
 window.addEventListener('shake', xx);
 },
 handleInit(){
 this.isTip = false
 this.ios13granted()
 },
 ios13granted() {
 if (typeof DeviceMotionEvent.requestPermission === 'function') {
 DeviceMotionEvent.requestPermission().then(permissionState => {
 if (permissionState === 'granted') {
 this.initShake() //摇一摇
 } else if(permissionState === 'denied'){// 打开的链接不是https开头
 alert("当前IOS系统拒绝访问动作与方向。请退出微信,重新进入活动页面获取权限。或直接点击抽签桶参与活动")
 }
 }).catch((error) => {
 alert("请求设备方向或动作访问需要用户手势来提示")
 })
 } else {
 // 处理常规的非iOS 13+设备
 alert("处理常规的非iOS 13+设备")
 }
 },
}

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

Vue.js 相关文章推荐
Vue用mixin合并重复代码的实现
Nov 27 Vue.js
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 Vue.js
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
vue3中provide && inject的使用
Jul 01 Vue.js
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
vue elementUI表格控制对应列
Apr 13 Vue.js
el-table-column 内容不自动换行的解决方法
Aug 14 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 #Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 #Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 #Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 #Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 #Vue.js
vue keep-alive的简单总结
Jan 25 #Vue.js
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 #Vue.js
You might like
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
python微信公众号之关键词自动回复
2018/06/15 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
2018/06/26 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
python中reload重载实例用法
2020/12/15 Python
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
AmazeUI中模态框的实现
2020/08/19 HTML / CSS
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
养殖项目策划书范文
2014/01/13 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
作文批改评语
2014/12/25 职场文书
社区党务工作总结2015
2015/05/19 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android