本文为大家分享了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的图片
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】