navigator.vibrate()不提供震动反馈数据,因其是单向轻量级提示接口,无传感器读数、执行状态或事件回调;仅返回true表示调用成功,不保证实际震动发生。
HTML5 的 navigator.vibrate() 只能触发震动,不能“获取”震动反馈数据——它没有返回传感器读数、持续时间误差、电机状态或实际执行结果。

该 API 是单向命令式接口,设计目标是轻量级提示(如消息提醒),而非硬件闭环控制。浏览器不暴露底层振动器的传感器数据(比如加速度计读数、马达响应延迟、是否被系统静音/禁用等),也没有回调或事件通知震动是否真实发生。
navigator.vibrate() 返回 true 仅表示“调用成功”,不保证震动已执行(例如:设备不支持、用户未授权、系统设置为静音、页面不在前台)vibrationstart / vibrationend 事件,无法监听实际起止时刻click、touchend)后首次调用;后续调用可能被忽略虽不能取数,但可通过组合策略提高对震动行为的可观测性:
navigator.vibrate 是否存在且为函数:if ('vibrate' in navigator && typeof navigator.vibrate === 'function') { /* 可尝试调用 */ }button.addEventListener('click', () => {
const start = performance.now();
const ok = navigator.vibrate(200);
console.log('vibrate() returned:', ok, 'at', start);
});document.visibilityState 排查前台状态影响:if (document.visibilityState !== 'visible') {
console.warn('Page not visible — vibration likely blocked');
}以下情况均导致 navigator.vibrate() 静默失败(返回 true,但无震动):
真正需要震动反馈数据(如校准触觉强度、测量响应延迟、做无障碍反馈验证)的应用,必须绕过浏览器限制,走原生层(如 Capacitor + Android Vibrator API 或 iOS UIFeedbackGenerator),再通过桥接把传感器/日志回传到 Web 层。纯 HTML5 + Vibration API 没有取数路径。