Html5+JS实现手机摇一摇功能


Posted in HTML / CSS onApril 24, 2015

HTML5一个重要特性就是DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持。这个特性包括两种事件:

1、 deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度、方位、朝向等。

2、 deviceMotion:封装了运动传感器数据的事件,可以获取手机运动状态下的运动加速度等数据。 使用它我们能够很容易的实现重力感应、指南针等有趣的功能,在手机上将非常有用。例如Opera H5体验版里的重力感应球示例就是通过监听DeviceOrientation API的deviceOrientation事件来实现的。 其实它还能帮助我们在网页上实现一个手机应用里非常常见而时尚的功能:手机摇一摇。

DeviceMotionEvent(设备运动事件)返回设备有关于加速度和旋转的相关信息。加速度的数据将包含三个轴:x,y和z(示意如下图所示,x轴横向贯穿手机屏幕或者笔记本键盘,y轴纵向贯穿手机屏幕或笔记本键盘,z轴垂直于手机屏幕或笔记本键盘)。因为有些设备可能没有硬件来排除重力的影响,该事件会返回两个属性,accelerationIncludingGravity(含重力的加速度)和acceleration(加速度),后者排除了重力的影响。

1. [代码]监听运动传感事件
2. [代码]获取含重力的加速度
3. [代码]核心方法实现代码

HTML5一个重要特性就是DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持。这个特性包括两种事件:

1、 deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度、方位、朝向等。

2、 deviceMotion:封装了运动传感器数据的事件,可以获取手机运动状态下的运动加速度等数据。
使用它我们能够很容易的实现重力感应、指南针等有趣的功能,在手机上将非常有用。例如Opera H5体验版里的重力感应球示例就是通过监听DeviceOrientation
API的deviceOrientation事件来实现的。

其实它还能帮助我们在网页上实现一个手机应用里非常常见而时尚的功能:手机摇一摇。

DeviceMotionEvent(设备运动事件)返回设备有关于加速度和旋转的相关信息。加速度的数据将包含三个轴:x,y和z(示意如下图所示,x轴横向贯穿手机屏幕或者笔记本键盘,y轴纵向贯穿手机屏幕或笔记本键盘,z轴垂直于手机屏幕或笔记本键盘)。因为有些设备可能没有硬件来排除重力的影响,该事件会返回两个属性,accelerationIncludingGravity(含重力的加速度)和acceleration(加速度),后者排除了重力的影响。

1. [代码]监听运动传感事件

复制代码
代码如下:

if (window.DeviceMotionEvent) {
window.addEventListener(‘devicemotion’,deviceMotionHandler, false);
}

2. [代码]获取含重力的加速度
复制代码
代码如下:

function deviceMotionHandler(eventData) {
var acceleration =eventData.accelerationIncludingGravity;
}

3. [代码]核心方法实现代码
复制代码
代码如下:

var SHAKE_THRESHOLD = xxx;
var last_update = 0;
var x, y, z, last_x, last_y, last_z;</p> <p>function deviceMotionHandler(eventData) {
var acceleration =eventData.accelerationIncludingGravity;</p> <p>var curTime = newDate().getTime();</p> <p>if ((curTime – lastUpdate)> 100) {</p> <p>var diffTime = curTime -last_update;
last_update = curTime;</p> <p>x = acceleration.x;
y = acceleration.y;
z = acceleration.z;</p> <p>var speed = Math.abs(x +y + z – last_x – last_y – last_z) / diffTime * 10000;</p> <p>if (speed > SHAKE_THRESHOLD) {
alert(“shaked!”);
}
last_x = x;
last_y = y;
last_z = z;
}
}
HTML / CSS 相关文章推荐
纯CSS3实现图片无间断轮播效果
Aug 25 HTML / CSS
浅析两列自适应布局的3种思路
May 03 HTML / CSS
详解纯CSS3制作的20种loading动效
Jul 05 HTML / CSS
CSS3中:nth-child和:nth-of-type的区别深入理解
Mar 10 HTML / CSS
利用CSS3实现文字折纸效果实例代码
Jul 10 HTML / CSS
CSS3实现图片抽屉式效果的示例代码
Nov 06 HTML / CSS
纯CSS3实现移动端展开和收起效果的示例代码
Apr 26 HTML / CSS
HTML5 中新的全局属性(整理)
Jul 31 HTML / CSS
谈一谈HTML5本地存储技术
Mar 02 HTML / CSS
html5生成柱状图(条形图)效果的实例代码
Mar 25 HTML / CSS
Canvas 像素处理之改变透明度的实现代码
Jan 08 HTML / CSS
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
Apr 22 HTML / CSS
HTML5 Canvas的事件处理介绍
Apr 24 #HTML / CSS
HTML5 audio标签使用js进行播放控制实例
Apr 24 #HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
Apr 24 #HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
Apr 24 #HTML / CSS
HTML5 video标签(播放器)学习笔记(二):播放控制
Apr 24 #HTML / CSS
HTML5 video标签(播放器)学习笔记(一):使用入门
Apr 24 #HTML / CSS
HTML5 Video标签的属性、方法和事件汇总介绍
Apr 24 #HTML / CSS
You might like
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
深入解析php中的foreach问题
2013/06/30 PHP
php中socket的用法详解
2014/10/24 PHP
php微信支付接口开发程序
2016/08/02 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
十个Python程序员易犯的错误
2015/12/15 Python
Python打包可执行文件的方法详解
2016/09/19 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
给男朋友的道歉信
2014/01/12 职场文书
保险经纪人求职信
2014/03/11 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
医院党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
企业年检委托书范本
2014/10/14 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
初中优秀学生评语
2014/12/29 职场文书
暑假生活随笔
2015/08/15 职场文书