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是否可以跨文件同时控制多个iframe页面的应用技巧
Dec 16 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
Jun 02 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
Apr 01 Javascript
JavaScript自动设置IFrame高度的小例子
Jun 08 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
jquery实现九宫格大转盘抽奖
Nov 13 Javascript
JavaScript的设计模式经典之代理模式
Feb 24 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
canvas的神奇用法
Feb 03 Javascript
详解如何制作并发布一个vue的组件的npm包
Nov 10 Javascript
js实现图片实时时钟
Jan 15 Javascript
JavaScript链式调用原理与实现方法详解
May 16 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控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
2017/01/19 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
在Linux下调试Python代码的各种方法
2015/04/17 Python
python开发之thread线程基础实例入门
2015/11/11 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
九年级家长会邀请函
2014/01/15 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
司机工作自我鉴定
2014/09/19 职场文书
考勤制度通知
2015/04/25 职场文书
2016年党建工作简报
2015/11/26 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
PyTorch中的torch.cat简单介绍
2022/03/17 Python
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript
MySQL数据管理操作示例讲解
2022/12/24 MySQL
Python find()、rfind()方法及作用
2022/12/24 Python