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 相关文章推荐
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
May 11 Javascript
JavaScript严格模式禁用With语句的原因
Oct 20 Javascript
干货分享:让你分分钟学会javascript闭包
Dec 25 Javascript
解析javascript瀑布流原理实现图片滚动加载
Mar 10 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 Javascript
laydate.js日期时间选择插件
Jan 04 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
Mar 13 Javascript
vue操作下拉选择器获取选择的数据的id方法
Aug 24 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 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程序
2012/02/04 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
关于php开启错误提示的总结
2019/09/24 PHP
JavaScript 动态改变图片大小
2009/06/11 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
python基础教程之缩进介绍
2014/08/29 Python
在Python中使用HTML模版的教程
2015/04/29 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
python单例模式的多种实现方法
2019/07/26 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
学校做一个有道德的人活动方案
2014/08/23 职场文书
财务工作失误检讨书
2015/02/19 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
python字符串的一些常见实用操作
2022/04/06 Python
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript