JS实现微信摇一摇原理解析
本文为大家分享了JS实现微信摇一摇的原理,供大家参考,具体内容如下
实现原理:
1.微信摇一摇事件需要有硬件支撑,必须要求手机中有陀螺仪
2.在JS中给window添加ondevectionmotion事件。该事件在手机晃动,即手机中的陀螺仪发生旋转,该事件会触发
3.触发ondevectionmotion事件,会产生一个事件对象,通过该对象中的键值(accelerationIncludingGravity)来获得该重力加速器对象
4.重力加速器对象中含有陀螺仪的坐标,通过重力加速器对象.x-.y-.z获取陀螺仪当前的坐标
微信摇一摇 functionrandomNum(m,n){ returnMath.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.添加手机晃动事件; //获取手机晃动前加速器的值,创建一个对象获取 varcurrentValue={ x:0, y:0, z:0 }; //获取手机晃动之后加速器的值,创建一个对象获取 varlastValue={ x:0, y:0, z:0 } //设置晃动的最小的距离,只有达到该距离时,才执行摇一摇事件 varminValue=20; //当手机触发摇一摇事件时,我们得到此时的位置信息,存储到一个p标签上 //理论上讲:陀螺仪事件中的加速器是无法静止的; varp1=document.createElement("p"); //第一种方式: varimg1=document.createElement("img"); img1.style.width="375px"; img1.style.height="560px"; //手机晃动事件 window.ondevicemotion=function(e){ //获取对象 varevent1=event||e; //获取加速器对象,为了获取陀螺仪上的坐标信息 varacceleration=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) varranN=randomNum(1,6); //创一个定时器 vartimer=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);
注意:该代码中没有上传图片,如需要运行需要自己在代码的同级目录创建一个img文件夹,里面放上从1到6的后缀为.jpg的图片