上代码:
// 设置一个开关,用于控制执行一次摇一摇函数
var is_listener = true
// 震动代码
const SHAKE_SPEED = 300;
let lastTime = 0;//上次变化的时间
let x = y = z = lastX = lastY = lastZ = 0;//位置变量初始化
// 监听设备位置感应
if(window.DeviceMotionEvent&&is_listener) {
window.addEventListener('devicemotion', motionHandler, false);
} else {
// alert("你的设备不支持位置感应");
}
// 设备感应函数
function motionHandler(event) {
if(is_listener){
let acceleration = event.accelerationIncludingGravity;
let curTime = Date.now();//取得当前时间
if ((curTime - lastTime) > 120) {
let diffTime = curTime - lastTime;
lastTime = curTime;
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
//计算摇动速度
let speed = Math.abs(x + y + z - lastX - lastY - lastZ) / diffTime * 1000;
if (speed > SHAKE_SPEED) {
is_listener=false
alert("监听到您摇一摇手机咯~")
}
lastX = x;
lastY = y;
lastZ = z;
}
}else{
window.removeEventListener('devicemotion', function(){
console.log("不再监听摇一摇事件")
}, false);
}
}