[W3Conf] Luz Caballero:“设备 (去)方向?”

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费积分!

Luz Caballero(@gerbille)曾任 Opera 的开发者关系负责人,并讨论了移动设备上设备方向的数学世界。

这些是我在旧金山举行的 W3Conf 上她演讲的笔记,作为 这个现场博客系列 的一部分。

设备方向。它不仅仅是“纵向”和“横向”。它由三部分组成

  • deviceorientation – 某人握持设备的角度是多少?
  • devicemotion – 它是否在移动?它是否在加速?
  • compassneedscallibration – 它朝哪个方向? (此特定事件在设备需要重新校准时触发)

有不同类型的应用程序可以利用此信息

静态应用程序 = 测量事物并对该信息进行一次性使用(例如地图应用程序)
动态应用程序 = 设备的持续移动,不断使用该信息来影响应用程序(例如赛车游戏)

Luz 展示了一个用 WebGL 绘制的茶壶的酷炫演示,并通过移动她的手机在 3D 中旋转它。连接是通过 Web Socket 从手机到网络建立的。

方向在数学上有点复杂(泰特-布莱恩角)。 有三个轴,然后是它们的各种组合。 Alpha、Beta 和 Gamma(它们也有其他名称,如“俯仰角”。)。

旋转的数学运算非常复杂。

注意 alpha/gamma 奇点!(我认为这就像 交叉电流)。

其中一些可以使用 Remote.js 简化。我们之前看到的茶壶演示的代码看起来更容易实现。当收到 Web Socket 消息时,

avalue = data.alpha / 180 * Math.PI;
/* etc */

teapot.rotation.set(gvalue, avalue, -bvalue);

像往常一样,浏览器之间存在一些不一致性。Luz 为这些内容提供了一个测试套件 在 GitHub 上。 “原生”纵向或横向的设备之间也存在差异。 Firefox 和 Opera 对如何握持横向设备有不同的想法(线缆位于不同的侧面)。

解决这些差异的一种方法是要求用户在其当前设备上执行快速测试。然后记住它并在需要时将其用于数学运算。

这是一个 3D 指南针引擎,它处理缓冲(以实现更流畅的移动)。

对加速度(Safari)、accetrationIncludingGravity(Safari、Opera、Firefox)、rotationRate(Safari)和 interval 的支持也参差不齐。您可以使用if()测试来相当轻松地测试支持情况。

幻灯片