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 相关文章推荐
顶部缓冲下拉菜单导航特效的JS代码
Aug 27 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
Javascript BOM学习小结(六)
Nov 26 Javascript
Javascript获取随机数的实现方法
Jun 22 Javascript
JavaScript ES6的新特性使用新方法定义Class
Jun 28 Javascript
js实现手机发送验证码功能
Mar 13 Javascript
Vue 过渡实现轮播图效果
Mar 27 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
Jun 13 Javascript
JS实现简单的抽奖转盘效果示例
Feb 16 Javascript
浅谈JS的原型和继承
May 08 Javascript
bootstrap-table后端分页功能完整实例
Jun 01 Javascript
vue+Element-ui实现登录注册表单
Nov 17 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
JS解密入门之凭直觉解
2008/06/25 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
Python 文件管理实例详解
2015/11/10 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
python类中super() 的使用解析
2019/12/19 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
简述安装Slackware Linux系统的过程
2012/05/08 面试题
应届毕业生的自我鉴定
2013/11/13 职场文书
大学生村官工作感言
2014/01/10 职场文书
高等教育学自荐书范文
2014/02/10 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
环保建议书400字
2014/05/14 职场文书
班子四风对照检查材料
2014/08/21 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
放射科岗位职责
2015/02/14 职场文书