Vibration 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);
}

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

接口

其他接口的扩展

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

规范

规范
Vibration API

浏览器兼容性

另见