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 注册事件代码
Jan 27 Javascript
jQuery多级弹出菜单插件ZoneMenu
Dec 18 Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 Javascript
jQuery动画_动力节点节点Java学院整理
Jul 04 jQuery
基于jQuery的左滑出现删除按钮的示例
Aug 29 jQuery
vue中添加mp3音频文件的方法
Mar 02 Javascript
JS实现的缓冲运动效果示例
Apr 30 Javascript
JS如何获取地址栏的参数实例讲解
Oct 06 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
Dec 03 Javascript
如何基于filter实现网站整体变灰功能
Apr 17 Javascript
基于javascript实现日历功能原理及代码实例
May 07 Javascript
vue中的循环对象属性和属性值用法
Sep 04 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提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
javascript实现模拟时钟的方法
2015/05/13 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
python通过线程实现定时器timer的方法
2015/03/16 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
Python之list对应元素求和的方法
2018/06/28 Python
Python定时任务sched模块用法示例
2018/07/16 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Pygame框架实现飞机大战
2020/08/07 Python
社区交通安全实施方案
2014/03/22 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
超市创业计划书
2014/04/24 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书