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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

Изменить ответ на вопрос:

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

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

Ответ 7

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

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

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

Лучшие из тех, что я использовал до сих пор, были в Bard Tale для Droid.

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

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

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

Ответ 8

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

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

Edit: Left out) в конце $(window).height() <= "960"