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

发布时间 - 2026-01-11 02:27:28    点击率:

本文为大家分享了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的图片


# js  # 微信  # 摇一摇  # JavaScript+H5实现微信摇一摇功能  # 陀螺仪  # 延时器  # 创建一个  # 机中  # 中有  # 两次  # 事件中  # 大家分享  # 上讲  # 第一种  # 上传图片  # 放上  # 具体内容  # 键值  # 象中  # 中含有  # html  # head  # meta  # gt 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  网站建设保证美观性,需要考虑的几点问题!  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  JavaScript如何实现继承_有哪些常用方法  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel如何配置Horizon来管理队列?(安装和使用)  大同网页,大同瑞慈医院官网?  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Laravel如何实现API版本控制_Laravel版本化API设计方案  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Linux网络带宽限制_tc配置实践解析【教程】  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  Laravel如何使用Eloquent进行子查询  微信小程序 闭包写法详细介绍  详解Android图表 MPAndroidChart折线图  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  bootstrap日历插件datetimepicker使用方法  js代码实现下拉菜单【推荐】  Laravel如何处理文件下载请求?(Response示例)  如何用PHP快速搭建高效网站?分步指南  php485函数参数是什么意思_php485各参数详细说明【介绍】  焦点电影公司作品,电影焦点结局是什么?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何在阿里云通过域名搭建网站?  如何在建站主机中优化服务器配置?  如何用搬瓦工VPS快速搭建个人网站?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  高防服务器租用如何选择配置与防御等级?  大型企业网站制作流程,做网站需要注册公司吗?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  中山网站制作网页,中山新生登记系统登记流程?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何在橙子建站中快速调整背景颜色?  如何正确选择百度移动适配建站域名?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  javascript基本数据类型及类型检测常用方法小结  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何为不同团队 ID 动态生成多个独立按钮  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?