實現微信搖一搖功能簡單介紹

antzone發表於2017-04-09

關於微信搖一搖功能可能對於程式設計師這種更為宅的同胞們來說一定不陌生。下面就介紹一下如何利用javascript實現此功能,需要的朋友可以做一下參考。

在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封裝了裝置的運動感測器時間,通過改時間可以獲取裝置的運動狀態、加速度等資料(另還有deviceOrientation事件提供了裝置角度、朝向等資訊)。

而通過DeviceMotion對裝置運動狀態的判斷,則可以幫助我們在網頁上就實現“搖一搖”的互動效果。

運動事件監聽:

[JavaScript] 純文字檢視 複製程式碼
if (window.DeviceMotionEvent) {
  window.addEventListener('devicemotion', deviceMotionHandler, false);
} else {
  alert('當前手機不支援');
}

獲取加速度資訊:

“搖一搖”的動作既“一定時間內裝置了一定距離”,因此通過監聽上一步獲取到的x, y, z 值在一定時間範圍內的變化率,即可進行裝置是否有進行晃動的判斷。而為了防止正常移動的誤判,需要給該變化率設定一個合適的臨界值。

[JavaScript] 純文字檢視 複製程式碼
function deviceMotionHandler(eventData) {
  var acceleration = eventData.accelerationIncludingGravity;
  var curTime = new Date().getTime();
  if ((curTime - last_update) > 100) {
    var diffTime = curTime - last_update;
    last_update = curTime;
    x = acceleration.x;
    y = acceleration.y;
    z = acceleration.z;
    var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;
    var status = document.getElementById("status");
    if (speed > SHAKE_THRESHOLD) {
      doResult();
    }
    last_x = x;
    last_y = y;
    last_z = z;
  }
}

相關文章