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高级程序设计(第3版)学习笔记10 再访js对象
Oct 11 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
Sep 25 Javascript
处理文本部分内容的TextRange对象应用实例
Jul 29 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
Nov 26 Javascript
node.js读取文件到字符串的方法
Jun 29 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
Aug 18 Javascript
移动端横屏的JS代码(beta)
May 16 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
Aug 24 Javascript
vue2.0父子组件及非父子组件之间的通信方法
Jan 21 Javascript
bootstrap multiselect 多选功能实现方法
Jun 05 Javascript
JS实现点击链接切换显示隐藏内容的方法
Oct 19 Javascript
layui数据表格跨行自动合并的例子
Sep 02 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
Terran兵种介绍
2020/03/14 星际争霸
PHP聊天室技术
2006/10/09 PHP
php图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
JS类的封装及实现代码
2009/12/02 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
2015/03/26 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
微信小程序checkbox组件使用详解
2018/01/31 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
Python标准库之sqlite3使用实例
2014/11/25 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
乡镇干部先进事迹材料
2014/02/03 职场文书
中央空调节能方案
2014/06/15 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
初三英语教学反思
2016/02/15 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
Python采集壁纸并实现炫轮播
2022/04/30 Python