振动 API

大多数现代移动设备都包含振动硬件,这使软件代码能够通过让设备震动来向用户提供物理反馈。**振动 API** 为 Web 应用程序提供了访问此硬件的能力,如果设备支持此功能,则会执行此操作,如果设备不支持此功能,则不会执行任何操作。

概念和用法

振动被描述为一组开/关脉冲,这些脉冲可能具有不同的长度。该模式可以包含一个整数,表示振动持续的毫秒数,也可以包含一个整数数组,表示振动和暂停的模式。振动由单个方法控制:Navigator.vibrate().

单次振动

您可以通过指定单个值或仅包含一个值的数组来使振动硬件脉冲一次

js
navigator.vibrate(200);
navigator.vibrate([200]);

这两个示例都会使设备振动 200 毫秒。

振动模式

一个值的数组描述了设备振动和不振动的交替周期。数组中的每个值都会被转换为一个整数,然后交替解释为设备应振动的毫秒数和它不应振动的毫秒数。例如

js
navigator.vibrate([200, 100, 200]);

这会使设备振动 200 毫秒,然后暂停 100 毫秒,然后再使设备振动 200 毫秒。

您可以指定任意数量的振动/暂停对,并且可以提供偶数或奇数个条目;值得注意的是,您不必在最后提供一个暂停,因为振动会在每个振动周期的结束时自动停止。

取消现有振动

使用 0 值、空数组或包含全零数组调用 Navigator.vibrate() 将取消任何正在进行的振动模式。

持续振动

一些基本的 setIntervalclearInterval 操作将允许您创建持续振动

js
let vibrateInterval;

// Starts vibration at passed in level
function startVibrate(duration) {
  navigator.vibrate(duration);
}

// Stops vibration
function stopVibrate() {
  // Clear interval and stop persistent vibrating
  if (vibrateInterval) clearInterval(vibrateInterval);
  navigator.vibrate(0);
}

// Start persistent vibration at given duration and interval
// Assumes a number value is given
function startPersistentVibrate(duration, interval) {
  vibrateInterval = setInterval(() => {
    startVibrate(duration);
  }, interval);
}

当然,上面的代码片段没有考虑数组方法的振动;持续的基于数组的振动将需要计算数组项的总和并根据该数字创建间隔(可能需要额外的延迟)。

接口

扩展到其他接口

在支持振动的设备上引起振动。如果振动支持不可用,则不会执行任何操作。

规范

规范
振动 API(第二版)

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅