В браузерной версии картографического SDK HERE Technologies взаимодействие с клавиатурой строится на двух уровнях:
keydown,
keyup, keypress)H.mapevents.BehaviorПервый уровень работает на уровне HTML-страницы и контейнера карты, второй — интегрирован в систему управления картой и отвечает за перемещение, масштабирование и навигацию.
Ключевая особенность архитектуры заключается в том, что карта сама по
себе не «слушает клавиатуру» — это делает либо DOM-узел, либо слой
поведения (Behavior), который интерпретирует ввод как
команды навигации.
Контейнер карты — это обычный HTML-элемент, например:
<div id="map"></div>
Чтобы он начал получать события клавиатуры, необходимо обеспечить фокусировку:
const mapContainer = document.getElementById('map');
mapContainer.tabIndex = 0;
mapContainer.focus();
Без установки tabIndex элемент не может получить фокус,
а значит — не будет получать keydown события.
DOM-уровень применяется, когда требуется:
Пример базовой обработки:
mapContainer.addEventListener('keydown', (event) => {
switch (event.key) {
case 'ArrowUp':
console.log('Движение вверх');
break;
case 'ArrowDown':
console.log('Движение вниз');
break;
case '+':
console.log('Увеличение масштаба');
break;
case '-':
console.log('Уменьшение масштаба');
break;
}
});
При этом важно учитывать, что браузер может перехватывать некоторые клавиши (например, стрелки или пробел), вызывая прокрутку страницы.
Для предотвращения этого используется:
event.preventDefault();
Основной механизм управления картой в HERE Maps реализован через модуль:
H.mapevents.Behavior
Он позволяет интерпретировать ввод пользователя (мышь, сенсор, клавиатура) как действия над картой: панорамирование, зум, вращение.
Инициализация выглядит следующим образом:
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
const defaultLayers = platform.createDefaultLayers();
const map = new H.Map(
document.getElementById('map'),
defaultLayers.vector.normal.map,
{
center: { lat: 52.5, lng: 13.4 },
zoom: 10,
pixelRatio: window.devicePixelRatio
}
);
const beh * avior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
После этого карта получает стандартную поддержку:
+ / - — масштабированиеShift + колесо мыши синхронизируется с
клавиатурными сценариямиPageUp / PageDown могут использоваться в
кастомных конфигурацияхХотя Behavior активирует множество взаимодействий,
управление клавиатурой можно ограничивать или полностью отключать.
Отключение поведения:
behavior.disable(H.mapevents.Behavior.Feature.KEYBOARD);
Включение обратно:
behavior.enable(H.mapevents.Behavior.Feature.KEYBOARD);
Если требуется полностью убрать интерактивность:
behavior.disable(H.mapevents.Behavior.Feature.ALL);
Такой подход применяется в сценариях:
Иногда необходимо изменить стандартное поведение до того, как карта его обработает.
Реализуется через capture-фазу:
mapContainer.addEventListener(
'keydown',
(event) => {
if (event.key === 'ArrowLeft') {
event.preventDefault();
map.setCenter({
lat: map.getCenter().lat,
lng: map.getCenter().lng - 0.1
});
}
},
true
);
Параметр true включает фазу захвата, позволяя
перехватывать события раньше системы карты.
Клавиатурные события часто используются не сами по себе, а как триггеры для изменения состояния карты:
Пример масштабирования:
mapContainer.addEventListener('keydown', (event) => {
const zoom = map.getZoom();
if (event.key === '+') {
map.setZoom(zoom + 1, true);
}
if (event.key === '-') {
map.setZoom(zoom - 1, true);
}
});
Флаг true включает анимацию перехода.
Сложные интерфейсы часто требуют обработки комбинаций:
mapContainer.addEventListener('keydown', (event) => {
if (event.ctrlKey && event.key === 'ArrowUp') {
map.setZoom(map.getZoom() + 2);
}
if (event.shiftKey && event.key === 'ArrowDown') {
map.setZoom(map.getZoom() - 2);
}
});
При проектировании таких схем важно учитывать:
Клавиатурное управление в картографических интерфейсах является критически важным для доступности.
В контексте HERE Maps это выражается в:
Рекомендуемая практика — всегда обеспечивать:
mapContainer.setAttribute('role', 'application');
mapContainer.setAttribute('aria-label', 'Map');
mapContainer.tabIndex = 0;
Это позволяет вспомогательным технологиям корректно интерпретировать элемент карты.
Некоторые клавиши по умолчанию имеют системное поведение:
Чтобы карта не конфликтовала с этим поведением, используется:
event.preventDefault();
event.stopPropagation();
Но применение должно быть избирательным, чтобы не блокировать общий UX страницы.
Внутренний механизм H.mapevents.Behavior объединяет
разные источники ввода в единый поток:
Это означает, что:
Хотя keydown не является тяжёлым событием, в контексте
карты важно:
Пример оптимизации:
let timeout;
mapContainer.addEventListener('keydown', (event) => {
clearTimeout(timeout);
timeout = setTimeout(() => {
if (event.key === 'ArrowRight') {
map.setCenter({
lat: map.getCenter().lat,
lng: map.getCenter().lng + 0.05
});
}
}, 10);
});
Клавиатурные события в HERE Maps JavaScript API формируют многоуровневую систему:
H.mapevents.MapEvents преобразует ввод в события
картыH.mapevents.Behavior интерпретирует события как
навигационные действияЭта архитектура обеспечивает гибкость: от полного контроля над клавиатурой до полностью автоматической навигации без ручной обработки событий.