欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS实现微信摇一摇原理解析

程序员文章站 2023-02-19 22:15:24
本文为大家分享了js实现微信摇一摇的原理,供大家参考,具体内容如下 实现原理: 1.微信摇一摇事件需要有硬件支撑,必须要求手机中有陀螺仪 2.在js中给windo...

本文为大家分享了js实现微信摇一摇的原理,供大家参考,具体内容如下

实现原理:

1.微信摇一摇事件需要有硬件支撑,必须要求手机中有陀螺仪
2.在js中给window添加ondevectionmotion事件。该事件在手机晃动,即手机中的陀螺仪发生旋转,该事件会触发
3.触发ondevectionmotion事件,会产生一个事件对象,通过该对象中的键值(accelerationincludinggravity)来获得该重力加速器对象
4.重力加速器对象中含有陀螺仪的坐标,通过重力加速器对象.x - .y - .z 获取陀螺仪当前的坐标

<!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> 

注意:该代码中没有上传图片,如需要运行需要自己在代码的同级目录创建一个img文件夹,里面放上从1到6的后缀为.jpg的图片