vue中使用摇一摇功能(兼容ios13.3以上)
最近做了个摇一摇类似的功能,使用的是shake.js,但在ios13.3之前的版本中可以触发摇一摇,之后的版本需要兼容,需要制作一个让用户能手动点击的弹框,才能使用户授权动作与方向的权限。(要使用https的协议)<van-popup v-model="isTip" class="popInfo":style="{ zIndex: '2010' }" :close-on-click-over
·
最近做了个摇一摇类似的功能,使用的是shake.js,但在ios13.3之前的版本中可以触发摇一摇,之后的版本需要兼容,需要制作一个让用户能手动点击的弹框,才能使用户授权动作与方向的权限。(需使用https协议)
<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>
import Shake from 'shake.js'
export default {
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); //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+设备")
}
},
},
beforeDestroy() {
this.myShakeEvent.stop();
window.removeEventListener('shake', xx)
},
}
更多推荐
已为社区贡献4条内容
所有评论(0)