Vibration API 仅支持部分 Android 设备的 Chrome、Edge 和 Firefox,iOS 全面不支持;需在用户手势回调中调用,检查 'vibrate' in navigator,传入毫秒数或数组,超 5000ms 自动截断。

JavaScript 的 Vibration API 可以让网页在支持的移动设备上触发震动反馈,但它的使用有明确限制和注意事项。
哪些设备和浏览器支持?
目前仅部分 Android 设备上的 Chrome、Edge 和 Firefox 支持该 API,iOS 系统(包括 Safari)**完全不支持**,这是出于系统策略限制,无法绕过。调用前必须检查接口是否存在:
if ('vibrate' in navigator) {
// 可安全调用 navigator.vibrate()
} else {
// 不支持,需降级处理(如视觉/声音反馈)
}
如何正确调用震动?
vibrate() 方法接受一个数字或数字数组,单位为毫秒:
立即学习“Java免费学习笔记(深入)”;
- 单次短震:
navigator.vibrate(150)—— 震动 150ms 后停止 - 模式震动:
navigator.vibrate([200, 100, 300])—— 震 200ms → 停 100ms → 震 300ms - 清空队列:
navigator.vibrate(0)或navigator.vibrate([])可终止当前震动
注意:连续多次调用不会自动排队,后一次会覆盖前一次;且只有在用户手势(如 click、tap、keydown)触发的事件处理函数中才被允许执行,否则静默失败。
常见问题与规避建议
- 震动没反应? 检查是否在用户交互回调内调用、设备是否开启震动权限、系统设置是否禁用触感反馈
- Chrome 报错 “Only secure contexts can use Vibration API”? 确保页面通过 HTTPS 或 localhost 提供服务
- 震动时长超过 5000ms? 浏览器会自动截断,最大单次持续时间为 5 秒(规范限制)
-
想模拟“长按震动”? 可结合
setTimeout+touchstart/touchend判断按压时长,再触发对应震动模式
替代方案考虑
由于兼容性差(尤其 iOS 全面缺失),生产环境不建议单独依赖震动反馈。更稳妥的做法是:
- 将震动作为增强体验的可选层,配合视觉高亮、音效或文字提示
- 使用
Navigator.hapticFeedback(实验性,仅少数 Android Chrome 版本支持,非标准)需谨慎评估 - 在 PWA 中可通过 Web App Manifest 声明
"display": "standalone"提升权限可信度,但不改变 iOS 限制
不复杂但容易忽略。










