需在用户交互上下文中调用 navigator.vibrate(),先检测 'vibrate' in navigator 且支持振动,参数为毫秒数或数组,总时长不超过5000ms,iOS仅限iOS 16.4+且需手势立即触发,安卓部分系统需手动授权触感反馈。

JavaScript BOM 中调用设备震动 API,需使用 navigator.vibrate() 方法,但前提是页面处于用户交互触发的上下文中(如点击、触摸),且设备支持振动功能(主要为 Android 和部分 iOS 设备)。
确认浏览器和设备支持
并非所有浏览器或系统都开放振动能力:
- Chrome、Edge、Firefox(Android)支持良好;iOS Safari 从 iOS 16.4 起有限支持,但仅允许在用户手势后立即调用,且不支持长震或重复模式
- 需先检查
'vibrate' in navigator,避免报错 - 部分安卓定制系统(如华为 EMUI)可能默认禁用,需用户手动授权“触感反馈”权限
基本调用方式与参数规则
navigator.vibrate() 接收一个数字(毫秒)或数字数组:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
navigator.vibrate(200):震动 200 毫秒(单次) -
navigator.vibrate([100, 50, 100]):震动 100ms → 停 50ms → 震 100ms(奇数索引为震,偶数为停) - 传入
0、空数组[]或null会终止当前振动(部分浏览器忽略) - 总时长超过 5000ms 的数组会被截断(规范限制)
必须在用户手势中触发
直接在页面加载或定时器中调用会静默失败(返回 false):
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确:绑定在
button.addEventListener('click', () => navigator.vibrate(150)) - ✅ 可接受:触摸事件(
touchstart)、键盘回车(keydown且key === 'Enter') - ❌ 错误:放在
setTimeout、fetch回调、visibilitychange中(除非之前已有有效手势激活)
增强兼容性与降级处理
建议封装并提供视觉/声音反馈作为替代:
- 调用前检查:
if ('vibrate' in navigator && navigator.vibrate(0)) { ... }(vibrate(0)可探测是否启用) - 捕获返回值:
const success = navigator.vibrate(100); if (!success) console.warn('振动未触发'); - 搭配 CSS 动画(如按钮缩放)或
AudioContext短音提示,提升无震设备体验

















