Тест геймпада
Проверяйте кнопки, стики, триггеры, крестовину и вибрацию геймпада прямо в браузере
Левый стик
Правый стик
Триггеры
Тест вибрации
История событий
Что такое тест геймпада?
Тест геймпада считывает сигналы, которые контроллер передаёт браузеру через W3C Gamepad API, и показывает их в реальном времени: каждое нажатие кнопки, положение аналоговых стиков, глубину нажатия триггеров, направление крестовины и работу вибромоторов. Это самый быстрый способ убедиться, что контроллер исправен перед игрой, диагностировать залипающую кнопку, заметить дрифт стика на поношенном геймпаде или проверить, что работают оба вибромотора. Страница подсвечивает каждое входное действие на экранной раскладке в стиле Xbox, выводит сырые значения осей и триггеров и ведёт короткий журнал событий. Поскольку Gamepad API открывает контроллер только после того, как вы нажмёте на нём любую кнопку, страница сначала попросит вас это сделать — это правило безопасности браузера, а не поломка геймпада. Всё выполняется локально в браузере; никакие вводимые данные не покидают ваше устройство.
Как использовать
Как использовать
- Подключите геймпад через USB или Bluetooth
- Нажмите любую кнопку на геймпаде, чтобы активировать его
- Следите, как экранная раскладка подсвечивается при нажатиях и движении стиков
- Используйте кнопки вибрации для проверки вибромоторов
- Просмотрите историю событий, чтобы убедиться, что каждое нажатие зарегистрировано
Подсказки
- Зелёная подсветка означает, что сигнал корректно доходит до браузера
- Контроллер появляется только после нажатия любой кнопки на нём — это правило безопасности браузера
- Поддержка вибрации зависит от браузера и геймпада; шире всего она в Firefox
- Если стик в покое показывает ненулевое значение, метка дрифта предупредит о проблеме
- Между несколькими подключёнными геймпадами можно переключаться чипами слотов
Сценарии применения
Технический принцип
Браузер предоставляет доступ к геймпадам через W3C Gamepad API. Контроллер представлен объектом Gamepad, который возвращается функцией navigator.getGamepads() до четырёх слотов. У каждого геймпада есть строка id (производитель и продукт), поле mapping ('standard' для устройств с раскладкой Xbox, иначе пусто), массив buttons и массив axes. При стандартной раскладке buttons содержит 17 элементов: четыре лицевые кнопки (A/B/X/Y), два бампера (LB/RB), два аналоговых триггера (LT/RT), Select/Start, два нажатия стиков (L3/R3), четыре направления крестовины и кнопка Home/Guide. У каждой кнопки есть .pressed (логическое значение) и .value (от 0 до 1 — у триггеров аналоговая шкала, у цифровых кнопок 0 или 1). Массив axes хранит четыре значения в диапазоне от -1 до 1: X/Y левого стика, затем X/Y правого стика. API работает по модели опроса, а не событий, поэтому страница запускает цикл requestAnimationFrame и каждый кадр читает свежий снимок состояния. Чтобы не делать лишних перерисовок в простое, состояние обновляется только при изменении gamepad.timestamp — эта метка продвигается с каждым новым отчётом ввода. Подключение и отключение приходят как оконные события gamepadconnected и gamepaddisconnected. В целях безопасности объект gamepad остаётся null, пока пользователь не нажмёт кнопку на самом геймпаде, поэтому страница не может молча прочитать только что подключённый контроллер. Вибрация опциональна: если существует gamepad.vibrationActuator, вызов playEffect('dual-rumble', { duration, weakMagnitude, strongMagnitude }) приводит в движение оба мотора; Safari и некоторые сборки Chromium её не реализуют, поэтому страница проверяет поддержку и при её отсутствии отключает кнопки.
- navigator.getGamepads() возвращает до четырёх слотов; слот становится не-null только после нажатия кнопки на геймпаде.
- Стандартная раскладка: buttons[0-3] лицевые, [4-5] бамперы, [6-7] аналоговые триггеры, [8-9] Select/Start, [10-11] L3/R3, [12-15] крестовина, [16] Home.
- axes[0-1] — левый стик (X, Y), axes[2-3] — правый стик, диапазон каждого значения от -1 до 1.
- Модель опроса: цикл requestAnimationFrame читает снимки; gamepad.timestamp используется как затвор, чтобы в покое кадры ничего не делали.
- Вибрация через gamepad.vibrationActuator.playEffect('dual-rumble', ...) — требует проверки поддержки, доступна не во всех браузерах.
- События gamepadconnected / gamepaddisconnected сигнализируют о подключении и отключении; поле .index у геймпада задаёт его слот.
Примеры
Нажатие лицевой кнопки
Нажмите A -> buttons[0].pressed = true, value = 1.0Отклонение левого стика
Сдвиньте левый стик вверх-вправо -> axes[0] = 0.71, axes[1] = -0.68Нажатие триггера
Нажмите RT наполовину -> buttons[7].value = 0.50, pressed = false (ниже порога)Часто задаваемые вопросы
Почему геймпад не появляется после подключения?
Gamepad API скрывает контроллер, пока вы не нажмёте на нём любую кнопку — это защищает от скрытого фингерпринтинга подключённых устройств страницами. Подключите геймпад по USB или Bluetooth, переведите фокус на эту вкладку и нажмите любую кнопку — панель статуса переключится на «Подключён». Этот шаг активации — правило безопасности браузера, а не дефект геймпада.
Какие контроллеры поддерживаются?
Любой контроллер, который браузер отдаёт со стандартной раскладкой: геймпады Xbox One/Series, DualShock 4 и DualSense (большинство систем нормализуют их под стандарт), а также большинство универсальных USB-геймпадов. По Bluetooth или USB браузер приводит их к единой раскладке с 17 кнопками и 4 осями. Нестандартные геймпады тоже работают, но порядок кнопок может не совпадать с экранными подписями.
Почему не работает вибрация?
Поддержка вибрации зависит от среды. Firefox поддерживает её шире всего; Chrome и Edge — в свежих версиях; Safari не реализовал её вовсе. Сам геймпад также должен выставлять gamepad.vibrationActuator. Страница это проверяет и при отсутствии поддержки показывает явное уведомление, а не молчит, поэтому отсутствие вибрации — ограничение браузера или железа, а не баг инструмента.
Стик показывает значение, когда я его не трогаю — он сломан?
Небольшое значение около 0 — это обычный шум мёртвой зоны. Если в покое стик уходит за 0.12 по любой оси, метка дрифта становится оранжевой — это классический дрифт стика, вызванный износом потенциометров. Это аппаратная проблема, которая со временем обычно усугубляется; инструмент позволяет убедиться в ней до того, как винить игру.
Что-нибудь отправляется на сервер?
Нет. Gamepad API читается полностью в вашем браузере. Нажатия кнопок, положения стиков и команды вибрации не покидают ваше устройство, ничего не логируется и не передаётся.
Можно ли тестировать адаптивные триггеры DualSense, тачпад или гироскоп?
Нет. Стандартный Gamepad API открывает только кнопки, оси и базовую вибрацию. Адаптивные триггеры DualSense, ёмкостный тачпад и датчики движения не входят в веб-стандарт (кое-что спрятано в экспериментальных расширениях с плохой поддержкой браузеров), поэтому надёжно проверить их из браузера нельзя.