Определите, есть ли в браузере клавиатура / клавиши со стрелками на веб-странице - PullRequest
21 голосов
/ 15 января 2011

У меня полноэкранная игра на HTML + JavaScript, в которой клавиши со стрелками используются в качестве основных элементов управления.Это не может быть использовано на устройствах без клавиатуры Android (я не тестировал на iOS), и даже если бы у софт-клавиатуры были клавиши со стрелками, это заняло бы ненужное место.Поэтому я добавил экранные кнопки управления.Однако кнопки не нужны (и абсурдно большие) в настольных браузерах, поэтому я бы хотел, чтобы они не появлялись, если они не нужны.

Какую эвристику я могу использовать, чтобы решить, нужны ли они - то естьневозможно или неудобно для пользователя вводить события клавиш со стрелками - , кроме распознавания определенных агентов пользователя (что является простым, но не ориентированным на будущее)?

Я буду изКонечно, пользователь может скрывать / показывать кнопки;Я ищу полезную эвристику для выбора настройки по умолчанию.

Ответы [ 8 ]

32 голосов
/ 06 января 2012

Нет необходимости в прослушивании пользовательского агента, настройках конфигурации или каких-либо предположениях.Просто сделайте это:

  1. У вас есть титульный экран с надписью "нажмите, чтобы продолжить".
  2. При нажатии или нажатии клавиши скрыть сенсорное управление и начать игру.
  3. На ощупь покажите сенсорное управление и запустите игру.

Вам даже не нужно было упоминать опцию пользователю, и вы автоматически определили его предпочтительное управление.

4 голосов
/ 07 января 2012

Использование функции обнаружения с Modernizr: http://www.modernizr.com/docs/#touch

Хотя это не надежный способ проверить, есть ли у пользователя клавиатура, определенно надежно проверить, способен ли браузер работать с сенсорным экраном.

2 голосов
/ 06 января 2012

поиск определенных событий касания, таких как сенсорный запуск или запуск жестов, и отображение экранных элементов управления, если они обнаружены.

http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html

Я не уверен, был ли системный API-интерфейс реализован какими-либо браузерами: http://www.w3.org/TR/system-info-api/

2 голосов
/ 05 января 2012

Если у вас есть только стрелки (влево / вправо / вверх / вниз), вы могли бы подумать о добавлении сенсорных событий на игровом поле?Это не будет занимать место, очевидно, так как оно находится в верхней части игры, поэтому оно может быть «всегда включено».

  • Пользователь компьютера даже не знал бы, что он там есть, хотя он / она мог бы использовать их, чтобы играть в вашу игру с мышью.

  • Пользователь сенсорного устройства, с другой стороны, может гораздо легче использовать «области» (например, середина сверху, середина слева, середина снизу и середина справа) из-за… хорошо… касания вместо использования мыши.

Это может потребовать некоторого объяснения, так как вы, вероятно, не хотели бы, чтобы точки были видимы пользователю, но это похоже на допустимый вариант.

Даже если выиметь 4 кнопки и «огонь», вы можете сделать это, например, добавив «средний» раздел.

1 голос
/ 15 января 2011

вместо отображения экранной клавиатуры по умолчанию, добавьте кнопку для переключения отображения экранной клавиатуры.

Также было бы разумно дать экранной клавиатуре возможность изменить размер.

Изменить, чтобы ответить на вопрос:

Клавиатура должна быть скрыта по умолчанию, если большинство ваших пользователей будет на компьютере,

Отображается по умолчанию, если большинство ваших пользователей собираются на мобильном устройстве.

1 голос
/ 15 января 2011

Вместо того, чтобы пытаться угадать, настройте опцию конфигурации на выбор пользователя.

0 голосов
/ 16 февраля 2013

Альтернативным способом было бы привязать события свайпа и коды клавиш к одним и тем же функциям - так, чтобы оба работали в одно и то же время (конечно, это зависит от того, будет ли игра принимать свипы - или если на экране будут элементы управления джойстика).

Это даже покрывает неуверенность, упомянутую в комментариях к ответу, которую я только что заметил.

В большинстве случаев экранные элементы управления на клавиатуре слишком сложны в использовании (S-NES Emu).

Лучшими из тех, что я использовал до сих пор, были те, что были в «Бардской сказке для дроида».

Совет: лучшим для управления направленным движением в игре будет событие касания-удержания.Таким образом, можно нажать и удерживать ... нужна какая-то невидимая строительная линия между курсором и центром экрана - для того, чтобы измерить градусы для вектора движения.

Вероятно, можно даже контролировать скорость с помощьюзначение давления - просто в данный момент не уверены, можно ли получить доступ к свойству из JavaScript - или это доступно только в Android SDK?

В «Параллельном королевстве» можно перемещаться одним касанием (но символ не 't всегда в середине экрана, как это было бы с методом удержания касания, упомянутым выше).

0 голосов
/ 11 января 2012

Вы можете использовать javascript, чтобы узнать высоту порта представления Windows, а затем использовать оператор if, говорящий:

if ($(window).height() <= "960")) {
    //Your code to display keyboard controls
    //P.S. 960 is height of iPhone 4+ screen
}

Редактировать: пропущено) в конце $(window).height() <= "960"

...