无需登录 数据私有 本地保存

手柄振动测试 - Gamepad Vibration Actuator

10
0
0
0
#gv-tool { --gv-accent: #6c5ce7; --gv-accent2: #a29bfe; --gv-success: #00cec9; --gv-warning: #fdcb6e; --gv-danger: #e17055; --gv-bg-card: rgba(255,255,255,0.04); --gv-border: rgba(255,255,255,0.08); font-family: 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif; } #gv-tool .status-dot { width: 12px; height: 12px; border-radius: 50%; display: inline-block; transition: all 0.4s; } #gv-tool .status-dot.connected { background: #00cec9; box-shadow: 0 0 12px rgba(0,206,201,0.6); animation: gv-pulse-dot 2s infinite; } #gv-tool .status-dot.disconnected { background: #636e72; } #gv-tool .status-dot.searching { background: #fdcb6e; animation: gv-pulse-dot 0.8s infinite; } @keyframes gv-pulse-dot { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } } #gv-tool .gamepad-icon-wrap { display: inline-flex; align-items: center; justify-content: center; width: 100px; height: 100px; border-radius: 50%; background: var(--gv-bg-card); border: 2px solid var(--gv-border); transition: all 0.3s; position: relative; } #gv-tool .gamepad-icon-wrap.active { border-color: var(--gv-accent2); box-shadow: 0 0 30px rgba(108,92,231,0.35); } #gv-tool .gamepad-icon-wrap.shake-intense { animation: gv-shake-intense 0.06s linear infinite; } #gv-tool .gamepad-icon-wrap.shake-moderate { animation: gv-shake-moderate 0.09s linear infinite; } #gv-tool .gamepad-icon-wrap.shake-subtle { animation: gv-shake-subtle 0.14s linear infinite; } @keyframes gv-shake-intense { 0%,100%{transform:translate(0,0)} 20%{transform:translate(-4px,2px)} 40%{transform:translate(4px,-2px)} 60%{transform:translate(-3px,-3px)} 80%{transform:translate(3px,3px)} } @keyframes gv-shake-moderate { 0%,100%{transform:translate(0,0)} 25%{transform:translate(-3px,1.5px)} 50%{transform:translate(2px,-1px)} 75%{transform:translate(-2px,-1.5px)} } @keyframes gv-shake-subtle { 0%,100%{transform:translate(0,0)} 30%{transform:translate(-1.5px,0.8px)} 60%{transform:translate(1px,-0.5px)} 90%{transform:translate(-0.8px,-0.6px)} } #gv-tool .preset-btn { transition: all 0.2s; border-radius: 10px; font-weight: 500; font-size: 0.875rem; padding: 0.55rem 1rem; white-space: nowrap; } #gv-tool .preset-btn:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(0,0,0,0.25); } #gv-tool .preset-btn:active { transform: translateY(0); } #gv-tool .vib-bar { height: 10px; border-radius: 5px; background: rgba(255,255,255,0.08); overflow: hidden; transition: all 0.15s; } #gv-tool .vib-bar-fill { height: 100%; border-radius: 5px; transition: width 0.3s ease; } #gv-tool .vib-bar-fill.weak-bar { background: linear-gradient(90deg, #a29bfe, #6c5ce7); } #gv-tool .vib-bar-fill.strong-bar { background: linear-gradient(90deg, #fd79a8, #e17055); } #gv-tool .vib-bar-fill.trigger-bar { background: linear-gradient(90deg, #fdcb6e, #e17055); } #gv-tool .actuator-badge { font-size: 0.7rem; padding: 0.2rem 0.55rem; border-radius: 20px; font-weight: 600; letter-spacing: 0.4px; } #gv-tool .motor-indicator { width: 44px; height: 44px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.85rem; background: var(--gv-bg-card); border: 2px solid var(--gv-border); transition: all 0.3s; } #gv-tool .motor-indicator.pulsing-weak { border-color: #a29bfe; box-shadow: 0 0 18px rgba(162,155,254,0.5); animation: gv-motor-pulse 0.5s ease-in-out infinite; } #gv-tool .motor-indicator.pulsing-strong { border-color: #e17055; box-shadow: 0 0 18px rgba(225,112,85,0.5); animation: gv-motor-pulse-fast 0.3s ease-in-out infinite; } @keyframes gv-motor-pulse { 0%,100%{transform:scale(1)} 50%{transform:scale(1.12)} } @keyframes gv-motor-pulse-fast { 0%,100%{transform:scale(1)} 50%{transform:scale(1.18)} } #gv-tool .faq-card { border: 1px solid var(--gv-border); border-radius: 12px; background: var(--gv-bg-card); transition: all 0.25s; } #gv-tool .faq-card:hover { border-color: rgba(255,255,255,0.18); } #gv-tool .faq-card .faq-question { cursor: pointer; font-weight: 600; font-size: 1rem; display: flex; align-items: center; justify-content: space-between; padding: 1rem 1.25rem; user-select: none; } #gv-tool .faq-card .faq-answer { padding: 0 1.25rem 1.1rem; color: rgba(255,255,255,0.7); font-size: 0.9rem; line-height: 1.65; display: none; } #gv-tool .faq-card.open .faq-answer { display: block; } #gv-tool .faq-card .faq-icon { transition: transform 0.3s; font-size: 0.8rem; opacity: 0.6; } #gv-tool .faq-card.open .faq-icon { transform: rotate(180deg); opacity: 1; } #gv-tool .ripple-btn { position: relative; overflow: hidden; } #gv-tool .ripple-btn::after { content:''; position:absolute; inset:0; background:rgba(255,255,255,0.15); border-radius:50%; transform:scale(0); transition:transform 0.5s,opacity 0.5s; pointer-events:none; } #gv-tool .ripple-btn:active::after { transform:scale(2.5); opacity:0; transition:0s; } @media (max-width: 768px) { #gv-tool .gamepad-icon-wrap { width: 72px; height: 72px; } #gv-tool .preset-btn { font-size: 0.78rem; padding: 0.45rem 0.7rem; } #gv-tool .motor-indicator { width: 36px; height: 36px; font-size: 0.7rem; } }

手柄振动测试

Gamepad Vibration Actuator — 检测并测试手柄双马达振动与扳机振动

等待手柄连接...
振动API需要 Chromium内核浏览器(Chrome/Edge 88+)且使用 HTTPS 或 localhost。部分手柄需通过USB连接才能支持振动。
未检测到手柄

请连接游戏手柄后点击刷新

W
低频马达
S
高频马达
振动强度实时显示
低频马达 (Weak)0%
高频马达 (Strong)0%
双马达振动控制 (Dual-Rumble)
50
50
500ms
预设振动模式

常见问题与知识点

什么是手柄振动测试工具?
本工具利用 Gamepad API 的振动执行器接口,让你在浏览器中直接测试游戏手柄的双马达振动和扳机振动功能。无需安装任何软件,连接手柄即可实时测试不同强度和模式的振动效果。
为什么我的手柄不振动?
可能原因:①浏览器不支持(需Chrome/Edge 88+);②未使用HTTPS或localhost;③手柄通过蓝牙连接但驱动不完整(建议USB连接);④手柄本身不支持振动功能;⑤系统未识别手柄。请先确认系统已识别手柄,再刷新本页检测。
双马达振动(Dual-Rumble)是什么?
大多数现代游戏手柄内置两个振动马达:低频马达(Weak/Low Frequency)产生深沉、缓慢的隆隆感,适合模拟引擎轰鸣或爆炸余波;高频马达(Strong/High Frequency)产生快速、尖锐的震动,适合模拟碰撞、射击等瞬时冲击。两者组合能创造出丰富的触觉反馈。
哪些手柄支持扳机振动?
扳机振动(Trigger-Rumble)是较新的功能,主要支持 Xbox One / Xbox Series 手柄以及部分高端手柄。它可以在左右扳机键上独立产生振动,常用于模拟扣动扳机时的阻尼感。需要手柄通过USB连接且浏览器支持该特性。
Gamepad API 的浏览器兼容性如何?
Gamepad API 的基本功能(按键/摇杆读取)在Chrome、Firefox、Edge、Safari中均有良好支持。但振动执行器接口目前主要在Chromium内核浏览器(Chrome 88+、Edge 88+)中可用。Firefox有部分支持但不完整。Safari目前不支持振动功能。建议使用最新版Chrome进行测试。
使用振动测试安全吗?会损坏手柄吗?
完全安全。本工具发送的振动指令与游戏中使用的完全一致,振动强度在0-100%范围内可调,单次振动最长5秒。手柄的振动马达设计寿命非常长,正常使用不会造成损坏。如果担心,可以从低强度开始测试。
如何连接手柄到电脑/手机?
USB连接:最稳定可靠,直接将手柄通过USB线连接电脑即可。Windows会自动识别Xbox/PS手柄。蓝牙连接:在系统蓝牙设置中配对手柄。注意部分蓝牙手柄的振动功能可能受限。移动端:iOS/Android支持蓝牙手柄连接,但振动API在移动浏览器的支持有限。推荐使用USB有线连接以获得完整体验。
振动API的技术原理是什么?
浏览器通过 navigator.getGamepads() 获取连接的手柄对象,每个手柄的 hapticActuators(或 vibrationActuator)属性提供振动执行器接口。调用 playEffect('dual-rumble', {duration, weakMagnitude, strongMagnitude}) 即可触发振动,返回Promise在振动完成后resolve。整个过程在浏览器沙箱内完成,安全可靠。