Определить, имеет ли браузер клавиатуру/клавиши со стрелками на веб-странице
У меня есть полноэкранная игра в 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"