手機陀螺儀的註冊監聽事件

最近在公司做了一個VR視頻的遙控器,目的在於利用手機充當遙控器角色,控制電視端VR視頻的播放,我主要開發體感功能,也就是調用手機陀螺儀的數據,以下爲具體操作:

  1. 在畫面中增加一個體感功能的開關,綁定點擊事件
  2. 進入網頁後,體感功能自動爲開啓狀態。
  3. 當體感功能狀態變化時,如果從開啓狀態變爲關閉,則移除其註冊監聽事件;如果從關閉變爲開啓狀態,則先進行手機內是否有陀螺儀傳感器的判斷,如果沒有,則提示“該設備不支持體感功能”,如果有,則對陀螺儀添加一個註冊監聽事件。具體代碼如下所示
    sensorControl:function(){
          if (this.senorswitch) {
            if(window.DeviceOrientationEvent){
              window.addEventListener("deviceorientation", this.handleOrientation, true);
              this.isSensorExist = false;
            }else{
              this.isSensorExist = true;
            }
          }else {
            window.removeEventListener("deviceorientation", this.handleOrientation, true);
          }
        },
  4. 由於陀螺儀非常敏感,且發送頻率高,所以在handleOrientation事件中,先進行時間間隔的判斷,先將當前時刻賦值給一個變量,然後將其和上一次發送請求地 時刻相比,如果小於125毫秒(這裏是根據電視端需求定的,可根據需求自行修改),則結束這次運行,直至大於或者等於125毫秒,纔開始繼續進行後續操作。具體代碼如下:
    handleOrientation:function(orientData){
          var requesttime = new Date().getTime();
          if(requesttime - this.lasttime < 125){
            return;
          }
          this.lasttime = requesttime;
          var alpha = orientData.alpha;
          var beta = orientData.beta;
          var gamma = orientData.gamma;
          var minusbeta = beta - this.lastbeta;
          var minusgamma = gamma - this.lastgamma;
          var params = {
            "data":{
              "event":{
                "accuracy":10,
                "values":[gamma,beta,alpha]
              }
    
            }
    
          };
  5. 從陀螺儀傳感器可以獲得4個參數,分別爲:
  • absolute: 如果方向數據跟地座標系和設備座標系有差異,則爲true;如果方向數據由設備本身的座標系提供,則爲false
  • alpha: 設備沿z軸上的旋轉角度,範圍爲0~360
  • beta: 設備在x軸上的旋轉角度,範圍爲-180~180,。他描述的是設備由前向後旋轉的情況
  • gamma: 設備在y軸上的旋轉角度,範圍爲-90~90度,他描述的是設備由左向右旋轉的情況。

發佈了39 篇原創文章 · 獲贊 13 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章