Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
本节描述了本文档在发布时的状态。当前 W3C 发布列表及本技术报告的最新修订版可在 W3C 技术报告索引中找到,网址为 https://www.w3.org/TR/。
本文档代表了工作组对振动 API 范围和特性的共识。需注意,工作组已经意识到一些更高级的用例无法通过本较为简单的首个版本实现,计划在以后的修订版本中加以解决。
已提供与前一版本的变更历史。
本文档由设备与传感器工作组以候选推荐草案形式发布,采用了 推荐流程。
作为候选推荐发布,并不代表 W3C 及其成员的认可。候选推荐草案整合了工作组计划在后续候选推荐快照中包含的先前候选推荐的变更。
本文档为草案,可能随时被更新、替换或废止。除了作为正在进行的工作之外,不适合引用本文件。
本文档由遵循 W3C 专利政策 的工作组制作。 W3C 维护着 与本工作组交付物相关的专利公开名单 ,该页面还包含披露专利的说明。任何知晓某项专利且认为其包含 必要专利声明 的个人,必须根据 《W3C 专利政策》第 6 节 披露相关信息。
本文档受 2023年11月3日 W3C 流程文件 管辖。
本节为非规范性内容。
本 API 专为仅需简单触觉反馈的用例而设计。需要更细粒度控制的用例不在本规范范围内。本 API 不应作为通用通知机制使用。此类用例可通过 通知 API [NOTIFICATIONS] 规范处理。此外,是否启用振动的判断不属于本规范的范围。
除标记为非规范性内容的章节外,所有创作指南、图示、示例和注释均为非规范性内容。规范中的其他内容均为规范性内容。
本文档中的关键词 MAY(可以)、MUST(必须)和 SHOULD(应该)按照 BCP 14 [RFC2119] [RFC8174] 的定义进行解释,仅当这些词全部大写时,依照上述方式解释。
本规范定义的符合性标准适用于单一产品:实现本规范接口的用户代理。
使用 ECMAScript 实现本规范所定义 API 的实现,必须遵循 Web IDL 规范 [WEBIDL-1] 中定义的 ECMAScript 绑定方式, 因为本规范采用了该规范及术语。
WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;
vibrate()
方法的步骤为运行 处理振动模式 算法。
振动模式 由
VibratePattern 对象表示。
处理振动模式的规则如下算法:
vibrate()
方法的第一个参数。
visible,则返回 false 并终止这些步骤。
校验与标准化 一个 振动模式,给定 pattern,运行以下步骤:
执行振动 使用 全局对象 global 和 振动模式 pattern,执行以下步骤:
当 用户代理确定
Document 所在 顶级浏览上下文的
visibility
state发生变化时,
MUST 中止正在运行的 处理振动模式算法(如有)。
振动 API 本身不是数据源,因此不会在 Web 上产生可被消费的数据。但已知它可为其他 API 提供事件源。尤其是,一些传感器如加速度计或陀螺仪在制造时可能存在微小缺陷,因此可利用通过振动 API 产生的刺激,形成可被利用的指纹识别面。就此而言,振动 API 联合其他机制间接带来隐私风险,这可能包括跨设备追踪和通信。此外,设备振动时可能被外部观察者察觉,从而实现物理身份识别,甚至可能追踪用户。
因此,用户代理MAY在 API 被使用时通知用户,并按来源或全局提供禁用 API(实际无操作)的机制。
用户代理 SHOULD 应对每单位时间(如每分钟或每小时)内的振动请求数量进行全局速率限制,以防止过度使用。
本节为非规范性内容。
下例中,设备将振动 1000 毫秒(ms):
// 振动 1000 毫秒
navigator.vibrate(1000);
// 或者
navigator.vibrate([1000]);
下例中,设备将振动 50 毫秒,静止 100 毫秒,再振动 150 毫秒:
navigator.vibrate([50, 100, 150]);
下例用于取消所有正在进行的振动:
// 取消所有正在振动
navigator.vibrate(0);
// 或者
navigator.vibrate([]);
感谢 Justin Lebar、Mounir Lamouri、Jonas Sicking 及 Mozilla WebAPI 团队的贡献,以及提供 WebVibrator 原型作为初始输入。感谢 Anne van Kesteren 对规范如何在其他环境复用提出建议,感谢 Lukasz Olejnik 对隐私问题的考虑。最后,感谢张志强提供简体中文翻译。
自 W3C 推荐标准 2016年10月18日 以来的变更:
其他未影响文件解释的变更:
WebIDLtypedef (unsigned long or sequence<unsigned long>) VibratePattern;
partial interface Navigator {
boolean vibrate (VibratePattern pattern);
};