振动 API

W3C 候选推荐草案

关于本文档的更多信息
此版本:
https://www.w3.org/TR/2026/CRD-vibration-20260514/
最新发布版本:
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] … 消息主题 … (存档)
翻译
简体中文

摘要

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

本文档状态

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

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

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

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

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

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

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

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

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

1. 介绍

本节为非规范性内容。

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

2. 一致性

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

本文档中的关键词 MAYMUSTSHOULD 应按 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. patternvibrate() 方法的第一个参数。
  2. valid pattern 为将 pattern 传递给 校验与标准化 的结果。
  3. 如果 documentvisibility 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/