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优先加载笔记代码
Sep 30 Javascript
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
Jul 31 Javascript
JavaScript中的关键字"VAR"使用详解 分享
Jul 31 Javascript
JS实现仿苹果底部任务栏菜单效果代码
Aug 28 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
Dec 16 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
微信小程序图表插件(wx-charts)实例代码
Jan 17 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
May 29 Javascript
Webpack实现按需打包Lodash的几种方法详解
May 08 Javascript
jquery.validate表单验证插件使用详解
Jun 21 jQuery
JavaScript This指向问题详解
Nov 25 Javascript
Vue初始化中的选项合并之initInternalComponent详解
Jun 11 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
详解php协程知识点
2018/09/21 PHP
flash 得到自身url参数的代码
2009/11/15 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
Python松散正则表达式用法分析
2016/04/29 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
介绍一下linux文件系统分配策略
2012/11/17 面试题
Why we need EJB
2016/10/20 面试题
啤酒销售实习自我鉴定
2013/09/24 职场文书
优秀食品类广告词
2014/03/19 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
婚礼答谢词
2015/01/04 职场文书
社区宣传标语口号
2015/12/26 职场文书
物业管理交接协议书
2016/03/24 职场文书
2016年艾滋病宣传活动总结
2016/04/01 职场文书
创业计划书之美容店
2019/09/16 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python