You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端navigator.vibrate仅支持1秒以上振动的问题求助

Android Web游戏navigator.vibrate短时长无效问题排查与解决

可能的原因

  • Android系统/浏览器振动阈值限制:部分Android设备或Chrome/Edge等浏览器会对≤1000ms的振动请求做静默过滤,系统层面为避免误触发或过度振动设置了最小时长门槛,1000ms刚好卡在临界值被拦截,1001ms则绕过了限制。
  • 振动API实现差异:不同浏览器对navigator.vibrate的细节处理不同,部分会合并连续请求或直接忽略短时长请求,返回true仅代表API调用语法合法,不代表系统实际执行了振动。

解决办法

1. 改用振动模式数组

用数组形式的振动序列替代单时长请求,很多设备对这种模式的兼容性更好,能绕过阈值限制:

// 替代100ms单振动
navigator.vibrate([100]);
// 更适合触觉反馈的短振组合
navigator.vibrate([50, 10, 50]); // 短振两次,模拟轻触反馈

2. 短振动hack实现

如果单时长请求始终无效,尝试用超时提前终止振动的方式强制触发:

function shortVibrate(duration) {
  navigator.vibrate(duration);
  // 提前10ms取消,避免系统拦截短请求
  setTimeout(() => navigator.vibrate(0), duration - 10);
}
// 调用示例
shortVibrate(100);

3. 连续触发短振动

部分设备需要连续的振动请求才能激活触觉反馈,可尝试连续调用两次短振动:

if ('vibrate' in navigator) {
  navigator.vibrate(50);
  setTimeout(() => navigator.vibrate(50), 60);
}

4. 排查系统设置细节

即使你已开启振动,仍需确认以下细节:

  • 进入系统设置→声音和振动→触觉反馈,将强度调至中等以上
  • 检查是否开启了手机的「游戏模式」,部分模式会禁用WebView的振动,需将你的游戏网站添加至例外列表

额外说明

  • navigator.vibrate(0)仅能取消正在执行的振动,如果系统根本没响应初始请求,自然不会有效果;若要取消长振动,需确保在振动过程中调用:
// 启动5秒长振动
navigator.vibrate(5000);
// 2秒后取消
setTimeout(() => navigator.vibrate(0), 2000);
  • Android 12+对Web振动的权限控制更严格,确保网站使用HTTPS协议(本地开发用localhost不受限制),且振动触发逻辑绑定在用户交互事件内(如click、touchstart)。

内容的提问来源于stack exchange,提问作者Guillaume Brunerie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:43:11