ToolActToolAct

Тест геймпада

Проверяйте кнопки, стики, триггеры, крестовину и вибрацию геймпада прямо в браузере

Геймпад не обнаружен
Подключите геймпад и нажмите любую кнопку, чтобы активировать его
LBRBYXBA

Левый стик

X: 0.00Y: 0.00
В центре

Правый стик

X: 0.00Y: 0.00
В центре

Триггеры

LT
0.00
RT
0.00

Тест вибрации

Этот геймпад или браузер не поддерживает вибрацию.

История событий

Нажмите кнопку на геймпаде, чтобы начать тест...

Что такое тест геймпада?

Тест геймпада считывает сигналы, которые контроллер передаёт браузеру через W3C Gamepad API, и показывает их в реальном времени: каждое нажатие кнопки, положение аналоговых стиков, глубину нажатия триггеров, направление крестовины и работу вибромоторов. Это самый быстрый способ убедиться, что контроллер исправен перед игрой, диагностировать залипающую кнопку, заметить дрифт стика на поношенном геймпаде или проверить, что работают оба вибромотора. Страница подсвечивает каждое входное действие на экранной раскладке в стиле Xbox, выводит сырые значения осей и триггеров и ведёт короткий журнал событий. Поскольку Gamepad API открывает контроллер только после того, как вы нажмёте на нём любую кнопку, страница сначала попросит вас это сделать — это правило безопасности браузера, а не поломка геймпада. Всё выполняется локально в браузере; никакие вводимые данные не покидают ваше устройство.

Как использовать

Как использовать

  1. Подключите геймпад через USB или Bluetooth
  2. Нажмите любую кнопку на геймпаде, чтобы активировать его
  3. Следите, как экранная раскладка подсвечивается при нажатиях и движении стиков
  4. Используйте кнопки вибрации для проверки вибромоторов
  5. Просмотрите историю событий, чтобы убедиться, что каждое нажатие зарегистрировано

Подсказки

  • Зелёная подсветка означает, что сигнал корректно доходит до браузера
  • Контроллер появляется только после нажатия любой кнопки на нём — это правило безопасности браузера
  • Поддержка вибрации зависит от браузера и геймпада; шире всего она в Firefox
  • Если стик в покое показывает ненулевое значение, метка дрифта предупредит о проблеме
  • Между несколькими подключёнными геймпадами можно переключаться чипами слотов

Сценарии применения

Диагностика неотзывающихся или двойных срабатываний кнопокНажмите каждую лицевую кнопку, бампер и направление крестовины по одному разу и следите за подсветкой экранной раскладки, отражающей реальное состояние кнопок. История событий фиксирует каждое нажатие и отпускание, поэтому переключатель, срабатывающий дважды от одного нажатия или вообще не регистрирующийся, сразу виден на фоне заведомо исправной кнопки.
Обнаружение дрифта аналоговых стиковОставьте оба стика в нейтральном положении и следите за текущими значениями X/Y. У исправного стика в покое значения близки к 0.00; если стик в покое показывает более 0.12 по любой оси, метка дрифта становится оранжевой — это классический симптом изношенных модулей стика, из-за которого персонаж или курсор самопроизвольно уходит в сторону.
Проверка линейности триггеровПлавно нажимайте LT и RT и следите, как значение на шкале триггера растёт с 0.00 до 1.00. Триггер, который скачет, слишком рано уходит в максимум или не достигает полного значения, имеет изношенный потенциометр — полезно убедиться в этом до того, как обвинять гонялку в странной чувствительности газа.
Независимое тестирование вибромоторовКнопки слабой, сильной и двойной вибрации через GamepadHapticActuator API по отдельности управляют высокочастотным и низкочастотным моторами. Если срабатывает только одна интенсивность, один мотор мёртв; если вибрации нет совсем — её не поддерживает либо геймпад, либо браузер, и страница явно об этом сообщает.
Опознание и переключение между несколькими геймпадамиПанель статуса показывает для каждого геймпада строку с ID производителя, тип раскладки (стандартная или нестандартная), индекс слота, количество кнопок и осей. Когда спарено несколько геймпадов, чипы слотов позволяют переключать тестер между ними без переподключения — удобно для проверки всего набора контроллеров перед локальной многопользовательской сессией.

Технический принцип

Браузер предоставляет доступ к геймпадам через 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, ёмкостный тачпад и датчики движения не входят в веб-стандарт (кое-что спрятано в экспериментальных расширениях с плохой поддержкой браузеров), поэтому надёжно проверить их из браузера нельзя.

Похожие инструменты

Тест клавиатуры

Бесплатный онлайн-тест клавиатуры: распознавание нажатий в реальном времени, коды клавиш, виртуальная клавиатура и история. Проверьте каждую клавишу.

Тест мыши

Бесплатный онлайн-инструмент для тестирования кнопок мыши, колёсика прокрутки и двойного клика. Позиция мыши в реальном времени и счётчик кликов, история событий, защита приватности в браузере.

Тест экрана

Бесплатный онлайн-тест экрана: поиск битых и горячих пикселей, проверка засветки и контраста заливкой сплошным цветом. Быстро оцените качество дисплея.

Тест скорости реакции

Бесплатный онлайн-тест скорости реакции: измеряет время от сигнала до клика и ведёт учёт лучшего и среднего результата. Проверьте свою реакцию и побейте рекорд.

Тест частоты обновления

Бесплатный онлайн-тест частоты обновления экрана: определяет реальную частоту монитора по частоте кадров анимации. Поддержка 60, 120, 144 Гц и выше.

Инструмент проверки системы

Бесплатный онлайн-инструмент проверки системы. Определите ОС, браузер, разрешение экрана, конфигурацию оборудования и состояние сети. Локальная обработка.