当前位置:首页 > JavaScript

js实现手柄

2026-04-06 07:34:44JavaScript

使用 Gamepad API 检测手柄输入

现代浏览器支持 Gamepad API,可以直接监听手柄的按键和摇杆输入。通过 navigator.getGamepads() 获取连接的手柄列表,监听 gamepadconnectedgamepaddisconnected 事件。

window.addEventListener("gamepadconnected", (e) => {
  console.log("手柄已连接:", e.gamepad);
});

window.addEventListener("gamepaddisconnected", (e) => {
  console.log("手柄已断开:", e.gamepad);
});

function updateGamepad() {
  const gamepads = navigator.getGamepads();
  for (const gamepad of gamepads) {
    if (gamepad) {
      // 处理按键和摇杆输入
      console.log(gamepad.buttons, gamepad.axes);
    }
  }
  requestAnimationFrame(updateGamepad);
}
updateGamepad();

手柄按键和摇杆映射

手柄的按键和摇杆信息存储在 buttonsaxes 数组中。buttons 数组包含按键状态(pressedvalue),axes 数组包含摇杆的数值(-1 到 1)。

const gamepad = navigator.getGamepads()[0];
if (gamepad) {
  // 检测 A 键(通常为 buttons[0])
  if (gamepad.buttons[0].pressed) {
    console.log("A 键按下");
  }

  // 检测左摇杆水平轴(通常为 axes[0])
  const leftStickX = gamepad.axes[0];
  if (leftStickX > 0.5) {
    console.log("左摇杆向右");
  }
}

兼容性和备选方案

如果 Gamepad API 不可用,可以考虑使用第三方库如 Joystick.jsGamepad.js。这些库提供了更简单的接口和跨浏览器支持。

// 使用 Joystick.js 示例
const joystick = new Joystick({
  zone: document.getElementById('joystick'),
  mode: 'static',
  size: 100,
  color: '#000000',
});

joystick.on('move', (e) => {
  console.log(e.angle.degree, e.distance);
});

手柄振动功能

部分手柄支持振动功能,可以通过 GamepadHapticActuator 触发。

js实现手柄

const gamepad = navigator.getGamepads()[0];
if (gamepad && gamepad.vibrationActuator) {
  gamepad.vibrationActuator.playEffect("dual-rumble", {
    startDelay: 0,
    duration: 1000,
    weakMagnitude: 1.0,
    strongMagnitude: 1.0,
  });
}

标签: 手柄js
分享给朋友:

相关文章

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…