振动 API

W3C 候选推荐草案

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

摘要

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

本文档状态

本节描述了本文档在发布时的状态。当前 W3C 发布列表及本技术报告的最新修订版可在 W3C 技术报告索引中找到,网址为 https://www.w3.org/TR/。

本文档代表了工作组对振动 API 范围和特性的共识。需注意,工作组已经意识到一些更高级的用例无法通过本较为简单的首个版本实现,计划在以后的修订版本中加以解决。

已提供与前一版本的变更历史。

本文档由设备与传感器工作组以候选推荐草案形式发布,采用了 推荐流程

作为候选推荐发布,并不代表 W3C 及其成员的认可。候选推荐草案整合了工作组计划在后续候选推荐快照中包含的先前候选推荐的变更。

本文档为草案,可能随时被更新、替换或废止。除了作为正在进行的工作之外,不适合引用本文件。

本文档由遵循 W3C 专利政策 的工作组制作。 W3C 维护着 与本工作组交付物相关的专利公开名单 ,该页面还包含披露专利的说明。任何知晓某项专利且认为其包含 必要专利声明 的个人,必须根据 《W3C 专利政策》第 6 节 披露相关信息。

本文档受 2023年11月3日 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. 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。 现行标准。URL: https://dom.spec.whatwg.org/
[html]
HTML 标准。Anne van Kesteren; Domenic Denicola;Dominic Farolino;Ian Hickson;Philip Jägenstedt;Simon Pieters。WHATWG。现行标准。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。现行标准。URL: https://webidl.spec.whatwg.org/

D.2 参考性引用

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