javascript html5摇一摇功能的实现


Posted in Javascript onApril 19, 2016

通过网上的资料,加上自己的整理,写了一份html摇一摇功能的简介,用做技术备份。
知识要点 

1、DeviceMotionEvent
    这是html5支持的重力感应事件,关于文档请看:http://w3c.github.io/deviceorientation/spec-source-orientation.html
事件介绍:
deviceorientation 提供设备的物理方向信息,表示为一系列本地坐标系的旋角。
devicemotion 提供设备的加速信息,表示为定义在设备上的坐标系中的卡尔迪坐标。其还提供了设备在坐标系中的自转速率。若可行的话,事件应该提供设备重心处的加速信息。
compassneedscalibration 用于通知Web站点使用罗盘信息校准上述事件。

 

2、事件简介
 window.addEventListener("deviceorientation",function(event){// 处理event.alpha、event.beta及event.gamma},true);

{alpha:90,
 beta:0,
 gamma:0};

这是 deviceorientation事件返回的参数,为了获得罗盘指向,可以简单的使用360度减去alpha。若设被平行于水平表面,其罗盘指向为(360 - alpha)。 若用户手持设备,屏幕处于一个垂直平面且屏幕顶端指向上方。beta的值为90,alpha和gamma无关。 用户手持设备,面向alpha角度,屏幕处于一个垂直屏幕,屏幕顶端指向右方,则其方向信息如下

{alpha:270- alpha,
 beta:0,
 gamma:90};

 注册一个devicemotion事件的接收器:

window.addEventListener("devicemotion",function(event){// 处理event.acceleration、event.accelerationIncludingGravity、// event.rotationRate和event.interval},true);

 

 将设备安置于车辆之上,屏幕处于一个垂直平面,顶端向上,面向车辆后部。车辆行驶速度为v,向右侧进行半径为r的转弯。设备记录acceleration 和accelerationIncludingGravity在位置x处的情况,同时设备还会记录rotationRate.gamma的负值:

{acceleration:{x: v^2/r, y:0, z:0},
 accelerationIncludingGravity:{x: v^2/r, y:0, z:9.81},
 rotationRate:{alpha:0, beta:0, gamma:-v/r*180/pi}};

 功能实现

if(window.DeviceMotionEvent){
 window.addEventListener('devicemotion', YaoYiYao,false);
 }
 var speed =30;//speed
 var x = y = z = lastX = lastY = lastZ =0;
 function YaoYiYao(eventData){
 var acceleration =eventData.accelerationIncludingGravity;
 x = acceleration.x;
 y = acceleration.y;
 z = acceleration.z;
 if(Math.abs(x-lastX)> speed ||Math.abs(y-lastY)> speed ||Math.abs(z-lastZ)> speed){
 //简单的摇一摇触发代码
 alert(1);
 }
 lastX = x;
 lastY = y;
 lastZ = z;
 }

首先判断浏览器是否支持该事件。
YaoYiYao用来检测是否对手机进行摇动操作,具体就是获取手机的的移动数据,将其存在一个外部变量中,当下次又触发摇动事件时,判断上次的摇动坐标 和现在的摇动坐标 是否处于一个频繁调动的范围:Math.abs(x-lastX)> speed ||Math.abs(y-lastY)> speed ||Math.abs(z-lastZ)> speed
基本上 满足这种条件的话,就是手机正处于摇动状态,在if语句里面添加进你要执行的摇一摇代码即可。

以上就是html5摇一摇功能的实现思路,希望对大家的学习有所帮助。

Javascript 相关文章推荐
javascript 解析url的search方法
Feb 09 Javascript
JavaScript之HTMLCollection接口代码
Apr 27 Javascript
jquery插件validate验证的小例子
May 08 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
Mar 28 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
May 18 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
Aug 21 Javascript
js控制多图左右滚动切换效果代码分享
Aug 26 Javascript
Javascript编程中几种继承方式比较分析
Nov 28 Javascript
基于javascript实现九宫格大转盘效果
May 28 Javascript
JavaScript 随机验证码的生成实例代码
Sep 22 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
Jun 02 Javascript
解决eclipse中没有js代码提示的问题
Oct 10 Javascript
一些实用性较高的js方法
Apr 19 #Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
Apr 19 #Javascript
JavaScript中创建对象的模式汇总
Apr 19 #Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
Apr 18 #Javascript
简单讲解jQuery中的子元素过滤选择器
Apr 18 #Javascript
举例讲解jQuery中可见性过滤选择器的使用
Apr 18 #Javascript
html5+javascript实现简单上传的注意细节
Apr 18 #Javascript
You might like
str_replace只替换一次字符串的方法
2013/04/09 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
如何搜索查找并解决Django相关的问题
2014/06/30 Python
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
python之mock模块基本使用方法详解
2019/06/27 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
python让函数不返回结果的方法
2020/06/22 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
竞选卫生委员演讲稿
2014/04/28 职场文书
给校长的建议书500字
2014/05/15 职场文书
临床专业自荐信
2014/06/22 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
python requests模块的使用示例
2021/04/07 Python
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
Python 正则模块详情
2021/11/02 Python
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers