Vibration API

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

大多數現代行動裝置都具備震動硬體,讓軟體程式能透過讓裝置震動,向使用者提供實體回饋。Vibration API 提供 Web 應用程式存取這項硬體的能力(若裝置支援),若裝置不支援則不會執行任何操作。

概念與使用方式

震動被描述為一組開關交錯的脈衝模式,其持續時間可能各不相同。這個模式可以是單一整數,表示震動的毫秒數,或是由整數組成的陣列,描述震動與暫停的順序。震動的控制只透過一個方法:Navigator.vibrate()

單次震動

你可以透過傳入單一數值或只包含一個值的陣列,讓震動硬體震動一次:

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

這兩個範例都會讓裝置震動 200 毫秒。

震動模式

整數陣列會描述裝置交替震動與不震動的期間。陣列中的每個值都會被轉換為整數,並依序解讀為裝置應震動的毫秒數與應停止震動的毫秒數。例如:

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

這會讓裝置震動 200 毫秒,暫停 100 毫秒,然後再震動 200 毫秒。

你可以指定任意多組震動/暫停的配對,陣列的項目數可以是偶數也可以是奇數。值得注意的是,陣列的最後一項不一定需要是暫停,因為每段震動時間結束後會自動停止。

取消目前震動

呼叫 Navigator.vibrate() 並傳入 0、空陣列或僅包含零的陣列,即可取消目前正在進行的震動模式。

持續震動

你可以透過基本的 setIntervalclearInterval 操作來建立持續的震動效果:

js
let vibrateInterval;

// 啟動震動,傳入持續時間
function startVibrate(duration) {
  navigator.vibrate(duration);
}

// 停止震動
function stopVibrate() {
  // 清除 interval 並停止持續震動
  if (vibrateInterval) clearInterval(vibrateInterval);
  navigator.vibrate(0);
}

// 以指定的持續時間與間隔啟動持續震動
// 假設傳入的是數字
function startPersistentVibrate(duration, interval) {
  vibrateInterval = setInterval(() => {
    startVibrate(duration);
  }, interval);
}

當然,以上範例未涵蓋使用陣列模式的情況。若要使用陣列建立持續震動效果,則需計算整個陣列數值的總和,並以該總和(加上一些延遲時間)為基礎來建立間隔。

介面

延伸至其他介面

在支援的裝置上觸發震動。不支援時不會執行任何操作。

規範

Specification
Vibration API

瀏覽器相容性

參見