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 浏览器判断 绑定事件 arguments 转换数组 数组遍历
Jul 06 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
Jul 17 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
Sep 14 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
Apr 12 Javascript
jquery限定文本框只能输入数字即整数和小数
Nov 29 Javascript
JavaScript Math.ceil() 函数使用介绍
Dec 11 Javascript
调用innerHTML之后onclick失效问题的解决方法
Jan 28 Javascript
AngularJs中route的使用方法和配置
Feb 04 Javascript
jQuery通过ajax快速批量提交表单数据
Oct 25 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
Jul 03 Javascript
JS实现根据数组对象的某一属性排序操作示例
Jan 14 Javascript
Three.js实现雪糕地球的使用示例详解
Jul 07 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
PHP面向对象编程快速入门
2006/10/09 PHP
在普通HTTP上安全地传输密码
2007/07/21 PHP
PHP 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
jquery一般方法介绍 入门参考
2011/06/21 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
js实现指定时间倒计时效果
2019/08/26 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
python实现数据写入excel表格
2018/03/25 Python
Python3模拟登录操作实例分析
2019/03/12 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
python如何调用java类
2020/07/05 Python
详解python UDP 编程
2020/08/24 Python
python如何将图片转换素描画
2020/09/08 Python
几款好用的python工具库(小结)
2020/10/20 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
毕业生就业协议书
2014/04/11 职场文书
商务经理岗位职责
2014/08/03 职场文书
实习介绍信范文
2015/05/05 职场文书
2016年教代会开幕词
2016/03/04 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书