使用振动 API – WebAPI 的一部分

作为 Mozilla WebAPI 工作的一部分,我们一直在努力将振动 API 带到所有支持它的设备上。

振动 API 的理念是在游戏中或其他用例中,通过告诉设备振动来向用户发出通知。它访问本机振动器并告诉它应该振动多长时间。

示例

操作方法非常简单 - 在此示例中,参数是它应该振动多长时间,即毫秒数

navigator.mozVibrate(1000);

另一种控制振动的方式是提供振动模式,在振动和静止之间切换。列表中的奇数参数是振动时间,偶数参数是暂停时间

navigator.mozVibrate([200, 100, 200, 100]);

如果您想停止振动,可以简单地调用 `mozVibrate` 方法,并使用 0 或空模式作为参数,如下所示

navigator.mozVibrate(0);
navigator.mozVibrate([]);

试试看!

如果您想立即尝试,可以在 Firefox Aurora 中进行,该版本计划成为 Firefox 11。目前,它自然仅适用于支持振动的设备,这意味着(大多数)Android 手机上的 Firefox。

注意:如果您的 Android 设备启用了触觉反馈,则可能会抵消振动,这可能是一个潜在的注意事项。

演示

我创建了一个小演示,您可以在其中查看所需的代码并在其中进行测试。请试用一下并告诉我们您的想法!

JSFiddle 演示.

编辑:我们暂时的实现名称是振动器 API,但由于它给出了错误的印象,我们现在将其称为振动 API - 这也更符合 W3C 振动 API 草案

关于 Robert Nyman [名誉编辑]

Mozilla Hacks 的技术布道师和编辑。发表关于 HTML5、JavaScript 和开放网络的演讲和博客。Robert 是 HTML5 和开放网络的坚定支持者,自 1999 年以来一直从事 Web 前端开发工作 - 在瑞典和纽约市。他还在 http://robertnyman.com 定期发表博客,并且喜欢旅行和结识新朋友。

更多 Robert Nyman [名誉编辑] 的文章…


34 条评论

  1. Mustafa

    很酷的 API,只是在阅读它时很难保持严肃 :D

    2012 年 1 月 26 日 07:32

    1. Robert Nyman

      不过,这是一个临时的名称,可能会改为 Vibration,与 W3C 保持一致:http://www.w3.org/TR/vibration/

      2012 年 1 月 26 日 12:57

  2. DaveC

    哇!……振动器 API……我的妻子终于可能对我的工作感兴趣了!!;)

    (抱歉,忍不住了!)

    2012 年 1 月 26 日 07:40

    1. Robert Nyman

      不过,名称可能会更改。这只是一个临时的名称。

      2012 年 1 月 26 日 12:59

  3. 为什么

    我不明白为什么要提供一个数组,而我可以提供一个“rest”风格的签名,可以使用简单的 [].slice.call(arguments) 作为数组来解决……

    2012 年 1 月 26 日 07:59

    1. Robert Nyman

      将来,可能会有更多参数 - 例如模式应该重复的次数 - 所以仅仅使用数字是不够的。

      2012 年 1 月 26 日 08:48

  4. 不起作用……

    2012 年 1 月 26 日 08:19

    1. Robert Nyman

      如果您能提供有关哪些内容不起作用、在哪个设备上以及 Firefox 的哪个版本的更多信息,我们也许可以提供帮助。

      2012 年 1 月 26 日 08:49

  5. Justin Lebar

    如果您想停止振动,可以简单地调用 mozVibrate 方法,并使用未定义的参数、0、null 或空模式作为参数,如下所示

    null 或未定义的参数会导致 mozVibrate 抛出错误。0 或 [] 按预期工作。

    2012 年 1 月 26 日 08:34

    1. Robert Nyman

      是的,目前是这样。不过,据我了解,其他两个也应该可以工作。

      2012 年 1 月 26 日 08:50

      1. Justin Lebar

        不。

        http://hg.mozilla.org/mozilla-central/file/e758551e3924/dom/base/Navigator.cpp#l672

        2012 年 1 月 26 日 08:52

        1. Robert Nyman

          好的,那已经改变了。查看基于 Mozilla 的 W3C 工作,它指出它应该可以工作:http://www.w3.org/TR/vibration/

          然后我会更新帖子以将其删除。如果您对它为什么不起作用了解更多信息,那么任何原因也会很有趣。

          2012 年 1 月 26 日 08:56

  6. Justin Lebar

    在 w3c 列表中有一段关于此的非常长的线程,但要点是,很难让 null 和 undefined 与 WebIDL 的指定方式一起工作,所以我们放弃了它们。

    (此外,接受 undefined 将意味着 vibrate() 会使设备停止振动,这非常奇怪。)

    应删除从 Mozilla 的振动器规范源代码中获取的大评论。它是非规范性的、旧的、不正确的和误导性的。

    我已发送电子邮件给规范的作者,试图澄清这一点。

    2012 年 1 月 26 日 09:06

    1. Robert Nyman

      我明白了。
      感谢您的澄清!

      2012 年 1 月 26 日 09:09

  7. mike nowak

    > 目前,它自然仅适用于支持振动的设备,这意味着(大多数)Android 手机上的 Firefox。

    有计划将其与正在开发的游戏手柄支持 API 集成吗?这似乎是一个自然的契合点。

    2012 年 1 月 26 日 09:21

    1. Rob Hawkes

      嗨,Mike,目前正在努力为游戏手柄带来现在称为震动支持的功能。现在,它与振动器 API 的实现不同,但我们意识到我们需要在某个地方找到一个共同点。

      以下是一些关于游戏手柄震动支持进度的链接
      http://blog.robothaus.org/2011/12/09/gamepad-vibration-zero-to-hero/
      https://bugzilla.mozilla.org/show_bug.cgi?id=680289

      2012 年 1 月 26 日 10:03

  8. Pete

    “noticifaction”拼写不正确……

    2012 年 1 月 26 日 09:59

    1. Robert Nyman

      谢谢,我现在已经修复了。:-)

      2012 年 1 月 26 日 10:01

  9. Max

    你好,

    感谢状态更新。我刚刚安装了 Aurora 并运行了一些测试,尤其是 John Hammink 编写的那些测试。其中一个(或它们的组合?)导致我的手机无限振动。

    即使我杀死了 Aurora 应用程序,手机仍在振动,并且只在几秒钟后停止(在此期间,我几乎要重启手机了)。

    我找不到任何关于与振动 API 相关的安全考虑因素的讨论或内容,即使 W3C 在 http://www.w3.org/TR/vibration/ 中也没有提及此类方面。

    Firefox 团队对这些影响的态度如何?至少 https://wiki.mozilla.org/Security/Firefox/Fennec/WebVibrator#Threat_Brainstorming 提到了某些方面,但这些方面似乎没有得到解决。

    干杯!
    Max

    2012 年 1 月 27 日 01:41

    1. Robert Nyman

      你好,

      感谢您的提问和测试!
      John 的测试可能与当前的实现并不完全一一对应,因为它们是在几个月前编写的,但我可以确认可能会发生类似的事情。

      在安全性方面,我知道已经讨论过诸如选项卡应该可见之类的事情。我会请团队中的某个人回复,但您也可以随时在 WebAPI 邮件列表 中进行讨论。

      2012 年 1 月 27 日 02:49

    2. Justin Lebar

      Max,您能否就此问题提交一个错误报告?这种情况不应该发生,但我需要更多信息来了解哪里出了问题。

      http://bugzilla.mozilla.org

      2012 年 1 月 27 日 07:39

    3. Jonas Sicking

      振动 API 的安全模型是,当用户切换选项卡或离开/关闭页面时,我们会关闭振动器。换句话说,如果页面开启了振动器,而用户感到恼火或担心电池使用情况,只需离开或关闭用户当前正在查看的页面即可关闭振动器。

      因此,您不会遇到 Flash 中现在发生的情况,即“我打开了 50 个选项卡,其中一个正在播放声音,但我不知道是哪个”。后台选项卡永远无法开启振动器。如果振动器已开启,那是因为您当前正在查看的页面。只需关闭它,振动器就会关闭。

      2012 年 1 月 30 日 01:31

  10. Adrian von Gegerfelt

    振动的强度呢?

    作为 jQuery 的粉丝,我不禁认为,如果要添加暂停,添加大量参数有点乱,我宁愿像这样:

    vibrate[time,intensity]
    (类似于 wait())
    vibrate[time,intensity]

    或者像 jQuery 对动画所做的那样

    navigator.vibrate(time, intensity).delay(time).vibrate(time, intensity).delay(time) 等…

    2012 年 1 月 27 日 05:48

    1. Justin Lebar

      大多数硬件只支持一种振动强度,所以我们从这里开始。

      2012 年 1 月 27 日 07:38

  11. Max

    Justin,

    我将尝试重现它,然后提交错误报告。完成后,我将在此处发布 URL。

    2012 年 1 月 27 日 07:56

    1. Robert Nyman

      谢谢!

      2012 年 1 月 30 日 23:54

  12. Max

    Jonas,

    这是我预期的,但正如我在评论中所说,我并没有遇到这种情况。我杀死了应用程序,振动器仍然开启了几秒钟。不过,我仍然需要重现它。

    Max

    2012 年 1 月 30 日 02:43

    1. Robert Nyman

      是的,Jonas 的回复更笼统地回答了您关于振动 API 安全影响的问题。

      2012 年 1 月 30 日 23:53

  13. Pavel Pavlov

    如何关闭它!?..请尽快回复!

    2012 年 2 月 1 日 06:27

    1. Robert Nyman

      您的意思是通过编程方式(博客文章中已介绍)还是作为最终用户?

      2012 年 2 月 1 日 06:34

  14. Ollie Parsley

    仅供参考,我刚刚发布了一个名为 Vibrate.js 的简单包装 JS 包装器。 http://vibratejs.com

    Ollie

    2012 年 2 月 22 日 14:54

    1. Robert Nyman

      太好了,谢谢!

      2012 年 2 月 23 日 02:18

  15. Alejandro Lechuga

    我是否需要在我的 Android 版 Firefox Beta 上启用某种标志?

    2013 年 1 月 24 日 18:29

    1. Robert Nyman [编辑]

      据我所知,没有。它应该立即生效。

      2013 年 1 月 25 日 01:55

本文的评论已关闭。