振动 API

W3C 候选推荐草案

关于本文档的更多信息
此版本:
https://www.w3.org/TR/2026/CRD-vibration-20260521/
最新发布版本:
https://www.w3.org/TR/vibration/
最新编辑草稿:
https://w3c.github.io/vibration/
历史记录:
https://www.w3.org/standards/history/vibration/
提交历史
测试套件:
https://wpt.live/vibration/
实现报告:
https://w3c.github.io/vibration/reports/implementation.html
编辑:
Anssi Kostiainen (英特尔)
反馈:
GitHub w3c/vibration (拉取请求, 新问题, 开放问题)
public-device-apis@w3.org 邮件主题 [vibration] … 消息主题 … (存档)
翻译
简体中文
Limited availability:
More info

摘要

本规范定义了一个 API,可用于访问宿主设备的振动机制。振动是一种触觉反馈形式。

本文档状态

本节描述了本文档发布时的状态。当前的 W3C 发布文档和此技术报告的最新修订版本可以在 W3C 标准和草案索引中找到。

本规范已在基于 Chromium 的浏览器中实现。WebKit 已发布反对本 规范的立场。Firefox 已在 版本 129 中移除其实现。预计其当前形式不会推进到 W3C 推荐标准。

本文档代表了小组关于振动API的范围和特性的共识。需要注意的是,小组已经意识到有一些更高级的用例,目前的简单版本无法实现这些用例。计划在未来的修订中解决这些问题。

提供了与上一版本的变化历史记录。

本文档由设备与传感器工作组作为候选推荐草案发布,使用了 推荐轨道。

作为候选推荐发布并不意味着被 W3C 及其成员认可。候选推荐草案整合了 小组希望在后续的候选推荐快照中包含的上一版本候选推荐的更改。

这是一个草案文档,可能会随时被更新、替换或废弃。引用此文档时应仅将其视为正在进行中的工作。

本文档是由一个遵循 W3C 专利政策的工作组生产的。 W3C 维护着一个 公开专利披露列表,该页面还包括专利披露的说明。任何个人如果知晓某项专利,并认为该专利包含 必需的权利要求, 必须按照 W3C专利政策第6节的规定披露信息。

本文档受以下文件的管辖:2025年8月18日 W3C 过程文档。

1. 介绍

本节为非规范性内容。

本 API 专为仅需简单触觉反馈的用例而设计。需要更细粒度控制的用例不在本规范范围内。本 API 不应作为通用通知机制使用。此类用例可通过 通知 API [NOTIFICATIONS] 规范处理。此外,是否启用振动的判断不属于本规范的范围。

2. 一致性

除标记为非规范性内容的章节外,所有创作指南、图示、示例和注释均为非规范性内容。规范中的其他内容均为规范性内容。

本文档中的关键词 MAY、MUST 和 SHOULD 应按 BCP 14 [RFC2119] [RFC8174] 中的描述进行解释,并且只有当它们以大写字母形式出现时,如此处所示,才应进行此解释。

本规范定义的符合性标准适用于单一产品:实现本规范接口的用户代理。

使用 ECMAScript 实现本规范所定义 API 的实现,必须遵循 Web IDL 规范 [WEBIDL-1] 中定义的 ECMAScript 绑定方式, 因为本规范采用了该规范及术语。

3. 振动接口

WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;

partial interface Navigator {
    boolean vibrate (VibratePattern pattern);
};

vibrate() 方法的步骤为运行 处理振动模式 算法。 振动模式 由 VibratePattern 对象表示。

处理振动模式的规则如下算法:

  1. 令 pattern 为 vibrate() 方法的第一个参数。
  2. 令 valid pattern 为将 pattern 传递给 校验与标准化 的结果。
  3. 如果 document 的 visibility state 不是 visible,则返回 false 并终止这些步骤。
    注意
    受信任(也称为特权)应用与操作系统功能紧密集成时,即使应用不可见,也可能振动设备,因此可以忽略前述步骤。
  4. 用 this 的 相关全局对象 和 valid pattern 执行 执行振动。

校验与标准化 一个 振动模式,给定 pattern,运行以下步骤:

  1. 如果 pattern 是列表,则继续下一步。否则,运行以下子步骤:
    1. 令 list 为初始为空的列表,并将 pattern 添加到 list。
    2. 将 pattern 设为 list。
  2. 令 max length 的值为 10。
  3. 如果 pattern 的长度大于 max length,则截断 pattern,只保留前 max length 个条目。
    注意
    如果 pattern 的长度为偶数且不为零,则模式中的最后一个条目将无效,因此实现可在此处移除最后一个条目。
  4. 令 max duration 的值为 10000。
  5. 对于 pattern 中每个大于 max duration 的条目,将该条目值设为 max duration。
  6. 返回 pattern。

执行振动 使用 全局对象 global 和 振动模式 pattern,执行以下步骤:

  1. 如果 global 没有 粘性激活, 返回 false 并终止这些步骤。
  2. 实现 MAY 可以返回 false 并终止这些步骤。
    注意
    例如,因无振动硬件、用户设置了页面不可振动、或实现对页面振动总时长进行限制并拒绝超限请求,可能中止算法。
  3. 如果另一个 执行振动算法实例正在运行,按以下子步骤执行:
    1. 中止其他 执行振动 算法实例(如有)。
    2. 如果 pattern 是空列表、仅包含一个值为 0 的条目,或设备无法振动,则返回 true 并终止这些步骤。
  4. 返回 true,然后异步继续执行以下步骤。
  5. 对 pattern 中每个 time,执行以下子步骤:
    1. 如果 time 的索引为偶数(第一个条目索引为 0),则设备振动 time 毫秒。
    2. 否则,等待 time 毫秒。

当 用户代理确定 Document 所在 顶级浏览上下文的 visibility state发生变化时, MUST 中止正在运行的 处理振动模式算法(如有)。

4. 安全与隐私注意事项

振动 API 本身不是数据源,因此不会在 Web 上产生可被消费的数据。但已知它可为其他 API 提供事件源。尤其是,一些传感器如加速度计或陀螺仪在制造时可能存在微小缺陷,因此可利用通过振动 API 产生的刺激,形成可被利用的指纹识别面。就此而言,振动 API 联合其他机制间接带来隐私风险,这可能包括跨设备追踪和通信。此外,设备振动时可能被外部观察者察觉,从而实现物理身份识别,甚至可能追踪用户。

因此,用户代理MAY在 API 被使用时通知用户,并按来源或全局提供禁用 API(实际无操作)的机制。

用户代理 SHOULD 应对每单位时间(如每分钟或每小时)内的振动请求数量进行全局速率限制,以防止过度使用。

5. 示例

本节为非规范性内容。

下例中,设备将振动 1000 毫秒(ms):

// 振动 1000 毫秒
navigator.vibrate(1000);

// 或者
navigator.vibrate([1000]);

下例中,设备将振动 50 毫秒,静止 100 毫秒,再振动 150 毫秒:

navigator.vibrate([50, 100, 150]);

下例用于取消所有正在进行的振动:

// 取消所有正在振动
navigator.vibrate(0);

// 或者
navigator.vibrate([]);

A. 致谢

感谢 Justin Lebar、Mounir Lamouri、Jonas Sicking 及 Mozilla WebAPI 团队的贡献,以及提供 WebVibrator 原型作为初始输入。感谢 Anne van Kesteren 对规范如何在其他环境复用提出建议,感谢 Lukasz Olejnik 对隐私问题的考虑。最后,感谢张志强提供简体中文翻译。

B. 变更

自 W3C 推荐标准 2016年10月18日 以来的变更:

其他未影响文件解释的变更:

C. IDL 索引

WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;

partial interface Navigator {
    boolean vibrate (VibratePattern pattern);
};

D. 参考文献

D.1 规范性引用

[dom]
DOM标准. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[html]
HTML标准. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
RFC中用于指示需求等级的关键词. S. Bradner. IETF. 1997年3月。最佳当前实践。URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC8174]
RFC 2119关键词的大小写歧义. B. Leiba. IETF. 2017年5月。最佳当前实践。URL: https://www.rfc-editor.org/rfc/rfc8174
[WEBIDL-1]
Web IDL标准. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/

D.2 参考性引用

[NOTIFICATIONS]
通知API标准. Anne van Kesteren. WHATWG. Living Standard. URL: https://notifications.spec.whatwg.org/