<!DOCTYPE html>
<
html
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
meta
name
=
"viewport"
content
=
"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"
/>
<
title
>微信摇一摇</
title
>
</
head
>
<
body
>
</
body
>
<
script
type
=
"text/javascript"
>
function randomNum(m,n){
return Math.floor(Math.random(n - m + 1) + m);
}
//cover设置背景尺寸
//将背景图按所在标签的宽高,缩放
document.body.style.backgroundSize = "cover";
//设置body的背景图
document.body.style.backgroundImage = "url(img/bg.jpg)" ;
//事件设备:触发该事件需要硬件支持
//摇一摇功能:
//1.手机中的陀螺仪加速两次 加速器的差值当达到某个值时,则认为是手机晃动事件
//2.设置手机晃动事件前,获取加速器的值
//3.添加手机晃动事件;
//获取手机晃动前加速器的值,创建一个对象获取
var currentValue = {
x : 0,
y : 0,
z : 0
};
//获取手机晃动之后加速器的值,创建一个对象获取
var lastValue = {
x : 0,
y : 0,
z : 0
}
//设置晃动的最小的距离,只有达到该距离时,才执行摇一摇事件
var minValue = 20;
//当手机触发摇一摇事件时,我们得到此时的位置信息,存储到一个p标签上
//理论上讲:陀螺仪事件中的加速器是无法静止的;
var p1 = document.createElement("p");
//第一种方式:
var img1 = document.createElement("img");
img1.style.width = "375px";
img1.style.height = "560px";
//手机晃动事件
window.ondevicemotion = function(e){
//获取对象
var event1 = event || e;
//获取加速器对象,为了获取陀螺仪上的坐标信息
var acceleration = event1.accelerationIncludingGravity;
//记录当前加速器的值
currentValue.x = acceleration.x;
currentValue.y = acceleration.y;
currentValue.z = acceleration.z;
//判断微信摇一摇事件(手机是否晃动)
if (Math.abs(currentValue.x - lastValue.x) >= minValue || Math.abs(currentValue.y - lastValue.y) > minValue || Math.abs(currentValue.z - lastValue.z) > minValue) {
//说明摇一摇事件触发
//实现微信摇一摇,可以将摇一摇中的图片,作为body的背景图
//随机一张图片的下标(1 - 5)
var ranN = randomNum(1,6);
//创一个定时器
var timer = setInterval(function(){
ranN ++
if (ranN == 6) {
ranN = 1;
}
//为当前的body设置背景图
//document.body.style.backgroundImage = "url(img/"+ranN+".jpg)";
//为当前img设置路径
img1.src = "img/"+ranN+".jpg";
},200);
//设置一个延时器,延时一段时间后消除延时器
setTimeout(function(){
clearInterval(timer);
},1000);
}
//记录最后的值(保存上一次晃动事件中的加速器的值)
lastValue.x = currentValue.x;
lastValue.y = currentValue.y;
lastValue.z = currentValue.z;
}
document.body.appendChild(img1);
</
script
>
</
html
>