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中各浏览器中鼠标按键值的差异
Apr 07 Javascript
Javascript 类、命名空间、代码组织代码
Jul 31 Javascript
JavaScript整除运算函数ceil和floor的区别分析
Apr 14 Javascript
JS+CSS实现的拖动分页效果实例
May 11 Javascript
js基于cookie记录来宾姓名的方法
Jul 19 Javascript
深入理解React中es6创建组件this的方法
Aug 29 Javascript
javascript操作cookie
Jan 17 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
Aug 23 Javascript
说说AngularJS中的$parse和$eval的用法
Sep 14 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
Mar 01 Javascript
vue2过滤器模糊查询方法
Sep 16 Javascript
移动端手指操控左右滑动的菜单
Sep 08 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
长波知识介绍
2021/03/01 无线电
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
js获取图片大小的函数代码
2011/09/20 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
python matlibplot绘制3D图形
2018/07/02 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
考察现实表现材料
2014/05/19 职场文书
提拔干部考察材料
2014/05/26 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
2015年资料员工作总结
2015/04/25 职场文书
2019求职信大礼包
2019/05/15 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书