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 trim() 功能源代码
Feb 14 Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 Javascript
javascript读取文本节点方法小结
Dec 15 Javascript
使用gulp搭建本地服务器并实现模拟ajax
Apr 05 Javascript
jquery将标签元素的高设为屏幕的百分比
Apr 19 jQuery
在小程序中使用腾讯视频插件播放教程视频的方法
Jul 10 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
Sep 14 Javascript
微信小程序实现留言板(Storage)
Nov 02 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
Apr 15 Javascript
详解ES6 export default 和 import语句中的解构赋值
May 28 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
Sep 27 Javascript
Vue.js实现立体计算器
Feb 22 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 Cookie的一个使用注意点
2008/11/08 PHP
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
Python 含参构造函数实例详解
2017/05/25 Python
python 调用c语言函数的方法
2017/09/29 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
Python闭包函数定义与用法分析
2018/07/20 Python
python远程调用rpc模块xmlrpclib的方法
2019/01/11 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Pygame的程序开始示例代码
2020/05/07 Python
python创建文本文件的简单方法
2020/08/30 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
如何判断计算机可能已经中马
2013/03/22 面试题
考试作弊被抓检讨书
2014/01/10 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
学习十八大的感悟
2015/08/11 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书