【分享】HTML 5实现手机摇一摇的功能

标签: HTML5 技术博文 | 发表时间:2012-11-05 15:26 | 作者:HTML5研究小组
出处:http://www.mhtml5.com

在百度开发者大会上我介绍过 HTML5另外一个重要特性就是 DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持。这个特性包括两种事件:

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

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

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

我最开始见到这个功能其实是在PhotoShake里,后来包括微信在内的许许多多、大大小小的应用都加入了这个功能。

PhotoShake:照片摇一摇

如果你曾经做过Android或者iOS开发,对于这样的功能可能非常了解。但是下面,我们将在Web上首次实现这个功能。

让我们赶快开始吧!

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

对于DeviceOrientation,HTML5Rocks上有一篇详细的介绍文章《 This End Up: Using Device Orientation》,很有参考价值。

我们先来监听运动传感事件。

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

复制代码

然后获取含重力的加速度。

  • 01.function deviceMotionHandler(eventData) {
  • 02. var acceleration =eventData.accelerationIncludingGravity;
  • 03.}

复制代码

下面就涉及到我们如何计算用户摇晃手机的原理了。考虑的要点如下:

1、 用户大多时候都是以一个方向为主晃动手机来进行摇动;

2、 在晃动时三个方向的加速度数据必定都会变化;

3、 我们不能误判手机正常的运动行为,想一想,如果你的手机放在裤兜里,走路时它也会有加速度数据变化。

综上,我们应该针对三个方向的加速度进行计算,间隔测量它们,考察它们在固定时间段里的变化率,而且需要为它确定一个阈值来触发动作。

我们需要定义几个变量来记录历史x、y、z轴的数据以及上一次触发的时间。核心方法实现代码如下:

  • 01.var SHAKE_THRESHOLD = xxx;
  • 02.var last_update = 0;
  • 03.var x, y, z, last_x, last_y, last_z;
  • 04.
  • 05.function deviceMotionHandler(eventData) {
  • 06. var acceleration =eventData.accelerationIncludingGravity;
  • 07.
  • 08. var curTime = newDate().getTime();
  • 09.
  • 10. if ((curTime – lastUpdate)> 100) {
  • 11.
  • 12. var diffTime = curTime -last_update;
  • 13. last_update = curTime;
  • 14.
  • 15. x = acceleration.x;
  • 16. y = acceleration.y;
  • 17. z = acceleration.z;
  • 18.
  • 19. var speed = Math.abs(x +y + z – last_x – last_y – last_z) / diffTime * 10000;
  • 20.
  • 21. if (speed > SHAKE_THRESHOLD) {
  • 22. alert(“shaked!”);
  • 23. }
  • 24. last_x = x;
  • 25. last_y = y;
  • 26. last_z = z;
  • 27. }
  • 28.}

由此我们完成了手机摇一摇的功能,是不是非常简单?

相关 [分享 html 手机] 推荐:

【分享】HTML 5实现手机摇一摇的功能

- - HTML5研究小组
在百度开发者大会上我介绍过 HTML5另外一个重要特性就是 DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持. 1、 deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度、方位、朝向等.

分享45款高质量的免费(X)HTML/CSS模板

- Mikel - 博客园-首页原创精华区
  当你需要在短时间内设计出一个网站的时候,网站模板就非常有用了. 这也就是为什么这些设计模板已成为设计领域的最新趋势的原因. 在这篇文章中,收集了各式各样的网站模板,您可以免费下载使用,希望这些设计模板不仅带给您灵感,也让您回到创作轨迹. Coffee Maker ( 演示 | 下载 ). BusinessTemplate ( 演示 | 下载 ).

HTML 安全列表

- 火锅土豆 - 酷壳 - CoolShell.cn
下面这个网站罗列了,几乎所有的关于HTML 5 在各种主流浏览器上的安全问题,这些安全问题很有可能将会是黑客攻击你的网上的敲门砖,他们几乎都和Javascript都有关系,你就要好好注意了. IE6,7,8,9,和Opera 8.x, 9.x, 10.x 都支持这样的语法. 这个问题会存在于所有的Firefox版本中,可以让用户进行XSS(跨站脚本)攻击.

HTML学习笔记

- - CSDN博客推荐文章
超文本标记语言( 英文:HyperText Markup Language,HTML)是为“ 网页创建和其它可在 网页浏览器中看到的信息”设计的一种 标记语言. HTML被用来结构化信息——例如标题、段落和列表等等  点击打开链接. w3schools  点击打开链接 {语法大全,超赞.

html嵌套规则

- - Web前端 - ITeye博客
转载: http://www.studyofnet.com/news/412.html. 一、HTML 标签包括 块级元素(block)、内嵌元素(inline). 一般用来搭建网站架构、布局、承载内容……它包括以下这些标签:. 一般用在网站内容之中的某些细节或部位,用以“强调、区分样式、上标、下标、锚点”等等,下面这些标签都属于内嵌元素:.

Html 转换成PDF

- - 编程语言 - ITeye博客
最近在搞一个关于html转换为pdf的需求,网上找了很多,但是如果批量处理就会出现问题,最后找到了PD4ML,解决了我的问题. String urlstring = "file:///D:/债权转让及受让协议--魏然2014-08-16.html";. 需要在src目录下创建fonts文件夹,并且在文件夹中建立pd4fonts.properties ,配置文件中的内容如下.

HTML+CSS小结 - jessies

- - 博客园_首页
   结构   HTML        .    样式   CSS      .    行为   JavaScript(交互行为).    .    网页标题.    标题.

HTML head 头标签

- - IT技术博客大学习
HTML head 头部分的标签、元素有很多,涉及到浏览器对网页的渲染,SEO 等等,而各个浏览器内核以及各个国内浏览器厂商都有些自己的标签元素,这就造成了很多差异性. 移动互联网时代,head 头部结构,移动端的 meta 元素,显得更为重要. 了解每个标签的意义,写出满足自己需求的 head 头标签,是本文的目的.

动态绑定HTML

- - 破狼 Blog
在Web前端开发中,我们经常会遇见需要动态的将一些来自后端或者是动态拼接的HTML字符串绑定到页面DOM显示,特别是在内容管理系统(CMS:是Content Management System的缩写),这样的需求,更是遍地皆是. 对于对angular的读者肯定首先会想到ngBindHtml,对,angular为我们提供了这个指令来动态绑定HTML,它会将计算出来的表达式结果用innerHTML绑定到DOM.

HTML编码规范

- - SegmentFault 最新的文章
这段时间在整理前端部分代码规范,初步想法是从HTML、CSS、Javascipt、项目文件目录四部分是整理. 之前已经整理完了 CSS编码规范,有兴趣可以了解下. [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符. 对于非 HTML 标签之间的缩进,比如 script 或 style 标签内容缩进,与 script 或 style 标签的缩进同级.