在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封裝了裝置的運動感測器時間,透過改變時間可以取得裝置的運動狀態、加速度等資料(另還有deviceOrientation事件提供了裝置角度、朝向等資訊) 。
而透過DeviceMotion對裝置運動狀態的判斷,則可以幫助我們在網頁上就實現「搖一搖」的互動效果。
運動事件監聽
if (windowDevice.Device > window.addEventListener('devicemotion', deviceMotionHandler, false);
} else {
alert('你的手機太差了,買個新的吧。');
}
取得加速度資訊
“搖一搖”的動作既“一定時間內設備了一定距離”,因此通過監聽上一步獲取到的x, y, z 值在一定時間範圍內的變化率,即可進行設備是否有進行晃動的判斷。而為了防止正常移動的誤判,需要為該變化率設定一個適當的臨界值。
function deviceMotionHandler(event)> var acceleration = eventData.accelerationIncludingGravity;
var curTime = new Date().getTime();
if ((curTime - last_update) > 100) {
var diffTime = curTime - last_up = curTime;
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
var speed = Math.abs(x y z - last_x - last_y - last_z) / diff * 10000;
var status = document.getElementById("status");
if (speed > SHAKE_THRESHOLD) {
doResult();
}
= y;
last_z = z;
}
}
效果如圖: