<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,user-scalable=no" />
<title>Document</title>
</head>
<body>
<script type="text/javascript">
(function(){
var lastX;//记录上一次x轴的位置
var lastY;
var lastZ;
var maxRang = 80;//设置摇晃的幅度的最大值
var minRang = 10;//设置代表摇晃结束的数值
var isShake = false;//用户是否在摇晃
window.addEventListener('devicemotion', function(e) { //添加重力感应事件
var motion = e.accelerationIncludingGravity;//重力感应参数
var x = Math.round(motion.x);//记录x轴的数值并四舍五入小数
var y = Math.round(motion.y);
var z = Math.round(motion.z);
if(typeof lastX == "undefined"){//如果没有上一次的x轴的位置
lastX = x;//现在x轴的位置就为上一次x轴的位置
lastY = y;
lastZ = z;
return; //没有上一次的数值就不执行后面的函数了
}
var dis = Math.abs(x - lastX) + Math.abs(y - lastY) +
Math.abs(z - lastZ);//判断摇晃的幅度,当前的xyz轴减去上一次的xyz轴的数值
if(dis > maxRang) {//如果摇晃的幅度比设定的幅度大说明用户在摇晃手机
isShake = true;//用户是在摇晃
}
if(dis < minRang && isShake) { //如果dis比minRang小说明用户停止摇晃手机,并且曾经摇晃过手机
isShake = false;
//执行 摇一摇之后,要操作的内容
alert("您晃动了手机");
}
lastX = x; //记录此时的xyz的数值为上一次的数值
lastY = y;
lastZ = z;
});
})();
</script>
</body>
</html>