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 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
Jun 18 Javascript
在Node.js中使用Javascript Generators详解
May 05 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 Javascript
JS实现中国公民身份证号码有效性验证
Feb 20 Javascript
JS实现的Unicode编码转换操作示例
Apr 28 Javascript
浅谈React Native 中组件的生命周期
Sep 08 Javascript
本地搭建微信小程序服务器的实现方法
Oct 27 Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 Javascript
世界上最短的数字判断js代码
Sep 09 Javascript
vue绑定class的三种方法
Dec 24 Vue.js
一些实用性较高的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小技巧之过滤ascii控制字符
2014/05/14 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
基于Jquery的温度计动画效果
2010/06/18 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
python适合人工智能的理由和优势
2019/06/28 Python
pytorch的batch normalize使用详解
2020/01/15 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
Django创建一个后台的基本步骤记录
2020/10/02 Python
J2EE中常用的名词进行解释
2015/11/09 面试题
大三毕业自我鉴定
2014/01/15 职场文书
社区国庆节活动方案
2014/02/05 职场文书
优秀护士获奖感言
2014/02/20 职场文书
家长会演讲稿
2014/04/26 职场文书
个人求职信范文
2014/05/24 职场文书
计划生育汇报材料
2014/12/26 职场文书
圣诞节开幕词
2015/01/29 职场文书
战友聚会致辞
2015/07/28 职场文书
500字作文之周记
2019/12/13 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS