博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖
阅读量:7070 次
发布时间:2019-06-28

本文共 1535 字,大约阅读时间需要 5 分钟。

摇一摇JS脚本逻辑:

接下来是移动端JS脚本逻辑的实现,摇一摇的实现需借助html5新增的devicemotion事件,获取设备在位置和方向上的改变速度的相关信息,该事件的基本使用如下:

if (window.DeviceMotionEvent) {    window.addEventListener('devicemotion', handler, !1);    lastTime = new Date();} else {    alert('你的浏览器不支持摇一摇功能.');}

devicemotion事件对象中有一个accelerationIncludingGravity属性,该属性包括:一个包含x、y 和z 属性的对象,在考虑z 轴自然重力加速度的情况下,告诉你在每个方向上的加速度。该API的具体使用大家可以参考网上的资料,非常多,这里就不重复了。 摇一摇的具体逻辑如下:

function handler(e) {    var current = e.accelerationIncludingGravity;    var currentTime;    var timeDifference;    var deltaX = 0;    var deltaY = 0;    var deltaZ = 0;    //记录上一次设备在x,y,z方向上的加速度     if ((lastX === null) && (lastY === null) && (lastZ === null)) {        lastX = current.x;        lastY = current.y;        lastZ = current.z;        return;    }    //得到两次移动各个方向上的加速度绝对差距    deltaX = Math.abs(lastX - current.x);    deltaY = Math.abs(lastY - current.y);    deltaZ = Math.abs(lastZ - current.z);    //当差距大于设定的阀值并且时间间隔大于指定阀值时,触发摇一摇逻辑    if (((deltaX > threshold) && (deltaY > threshold)) || ((deltaX > threshold) && (deltaZ > threshold)) || ((deltaY > threshold) && (deltaZ > threshold))) {        currentTime = new Date;        timeDifference = currentTime.getTime() - lastTime.getTime();        //时间间隔        if (timeDifference > timeout) {            //触发摇一摇事件            dealShake();            lastTime = new Date;        }    }    lastX = current.x;    lastY = current.y;    lastZ = current.z;}

 

不考虑各等奖的中奖概率问题

最终完整代码示例:

1  2  3  4     
5
6 摇一摇抽奖 7 11 12 13
14 15 98 99

转载地址:http://wfhll.baihongyu.com/

你可能感兴趣的文章
学习SpringMVC——你们要的REST风格的CRUD来了
查看>>
Java:输入输出流 java.io包的层次结构
查看>>
阿里云服务API的试用
查看>>
【MySQL 忘记密码】MySQL忘记密码怎么解决 mysql5.5 windows7
查看>>
JavaScript 的基础学习(一)
查看>>
360周鸿祎:你能不能像打游戏一样干工作?
查看>>
剑法三套,程序员也能赚大钱(3) 转
查看>>
Django 信号
查看>>
NLPIR数据语义挖掘技术为企业提供精准管理
查看>>
[Istio]Kubernetes集群部署Istio 1.0
查看>>
HTML5篇
查看>>
分页技术之PageDataSource类
查看>>
How to: Create Instances of ASP.NET User Controls Programmatically
查看>>
关于 python中的 TKinterlistbox 控件加横竖滚动条
查看>>
【leetcode】258. Add Digits
查看>>
QtCreator Local and Expression 界面为空(转)
查看>>
23种设计模式
查看>>
c# 线程的基本使用
查看>>
Java基础教程(2)--Java开发环境
查看>>
有点激动,WPF换肤搞定了!
查看>>