vue中使用摇一摇功能(兼容ios13.3以上)

最近做了个摇一摇类似的功能,使用的是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>
//引入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+设备")
    }
  },
}

猜你喜欢

转载自blog.csdn.net/m0_48076809/article/details/113091396

相关文章