美文网首页
vue实现摇一摇

vue实现摇一摇

作者: web佳 | 来源:发表于2019-11-12 11:45 被阅读0次

废话不说直接上代码

<template>
  <div class="guide" @click="shake" @touchmove.prevent>
 
  </div>
</template>

<script @type="es6">

export default {
  name: "guide",
  created() {
    //运动事件监听
    if (window.DeviceMotionEvent) {
      window.addEventListener("devicemotion", this.deviceMotionHandler, false);
    }else{
        alert("您的浏览器不支持DeviceOrientation");
    }
  },
  data() {
    return {
      SHAKE_THRESHOLD: 4000,//速度要大于4000,证明用户是在快速摇手机
      lastUpdate: 0,
      x: 0,
      y: 0,
      z: 0,
      lastX: 0,
      lastY: 0,
      lastZ: 0
      //获取加速度信息
      //通过监听上一步获取到的x, y, z 值在一定时间范围内的变化率,进行设备是否有进行晃动的判断。
      //而为了防止正常移动的误判,需要给该变化率设置一个合适的临界值。
    };
  },
  methods: {
    shake(){
    //do what you want to do
     },
    deviceMotionHandler(eventData) {
      let acceleration = eventData.accelerationIncludingGravity;
      let curTime = new Date().getTime();// 当前时间戳
      if (curTime - this.lastUpdate > 100) {//手机抖动的时间要大于100ms,防止用户拿手机时,突然抖动而触发摇一摇功能
        let diffTime = curTime - this.lastUpdate;
        this.lastUpdate = curTime;
        this.x = acceleration.x;// 表示x轴(西到东)上的加速度
        this.y = acceleration.y;// 表示y轴(南到北)上的加速度
        this.z = acceleration.z;// 表示z轴(下到上)上的加速度
        let speed =
          (Math.abs(
            this.x + this.y + this.z - this.lastX - this.lastY - this.lastZ
          ) /
            diffTime) *
          10000;
        if (speed > this.SHAKE_THRESHOLD) {//速度要大于4000,证明用户是在快速摇手机
           window.removeEventListener(//移除运动事件监听
            "devicemotion",
            this.deviceMotionHandler,
            false
          );
          this.shake();// 摇一摇要做的事情
        }
        this.lastX = this.x;
        this.lastY = this.y;
        this.lastZ = this.z;
      }
    }
  }
};
</script>

<style rel="stylesheet/scss" lang="scss" scoped>

</style>

相关文章

网友评论

      本文标题:vue实现摇一摇

      本文链接:https://www.haomeiwen.com/subject/njbfictx.html