Intro.js предоставляет встроенные возможности для управления
поведением шагов с помощью клавиатуры, что позволяет пользователю
перемещаться по подсказкам без использования мыши. По умолчанию
используются стандартные клавиши Esc для выхода и стрелки
для навигации, но библиотека позволяет гибко переназначать эти действия
и добавлять собственные комбинации.
Для начала необходимо подключить Intro.js к проекту:
<link rel="stylesheet" href="introjs.min.css">
<script src="intro.min.js"></script>
Инициализация производится через объект Intro.js:
const intro = introJs();
intro.setOptions({
steps: [
{ element: '#step1', intro: 'Первый шаг' },
{ element: '#step2', intro: 'Второй шаг' },
{ element: '#step3', intro: 'Третий шаг' }
]
});
intro.start();
По умолчанию Intro.js поддерживает следующие клавиши:
Esc — завершение текущего интерактивного
руководства.ArrowRight / Enter — переход к следующему
шагу.ArrowLeft — возврат к предыдущему шагу.Эти действия можно отключить или изменить через опцию
keyboardNavigation и события onkeydown.
intro.setOptions({
keyboardNavigation: false // Отключение стандартной навигации
});
Для реализации кастомных комбинаций используется обработчик события
keydown на объекте document. Важно
предотвращать конфликт с встроенными клавишами и другими элементами
страницы.
document.addEventListener('keydown', function(event) {
switch (event.code) {
case 'KeyN': // N — перейти к следующему шагу
intro.nextStep();
event.preventDefault();
break;
case 'KeyP': // P — вернуться к предыдущему шагу
intro.previousStep();
event.preventDefault();
break;
case 'KeyQ': // Q — завершить интро
intro.exit();
event.preventDefault();
break;
}
});
Иногда требуется, чтобы клавиатурные сочетания действовали только на
определённом шаге. Intro.js предоставляет событие onchange,
которое срабатывает при переходе на новый шаг:
intro.onchange(function(targetElement) {
const stepId = intro._currentStep;
if (stepId === 1) {
document.addEventListener('keydown', handleStepTwoKeys);
} else {
document.removeEventListener('keydown', handleStepTwoKeys);
}
});
function handleStepTwoKeys(event) {
if (event.code === 'Space') {
intro.nextStep();
event.preventDefault();
}
}
Если требуется полностью заменить стандартные клавиши стрелок, можно
отключить keyboardNavigation и реализовать собственную
логику:
intro.setOptions({ keyboardNavigation: false });
document.addEventListener('keydown', function(event) {
if (event.code === 'ArrowRight') {
intro.nextStep();
event.preventDefault();
} else if (event.code === 'ArrowLeft') {
intro.previousStep();
event.preventDefault();
} else if (event.code === 'Escape') {
intro.exit();
event.preventDefault();
}
});
Для более сложных сценариев можно интегрировать библиотеки вроде
Mousetrap или Hotkeys.js, чтобы
задавать комбинации типа Ctrl+N или
Shift+ArrowRight:
hotkeys('ctrl+n', function() {
intro.nextStep();
});
hotkeys('ctrl+p', function() {
intro.previousStep();
});
Это позволяет обрабатывать сложные сочетания без необходимости
вручную проверять event.ctrlKey или
event.shiftKey.
Для адаптивного интерфейса можно менять горячие клавиши в зависимости
от контекста, используя событие onbeforechange:
intro.onbeforechange(function(targetElement) {
if (targetElement.id === 'step3') {
document.removeEventListener('keydown', defaultKeys);
document.addEventListener('keydown', customStepThreeKeys);
} else {
document.removeEventListener('keydown', customStepThreeKeys);
document.addEventListener('keydown', defaultKeys);
}
});
Такой подход позволяет создавать интерактивные, контекстно-зависимые подсказки с разными комбинациями клавиш на каждом шаге.
Если нужно, могу продолжить и подробно разобрать сценарии использования сочетаний клавиш для мобильных устройств и планшетов, где навигация с клавиатуры заменяется свайпами и жестами. Это расширяет тему настройки клавиатурных сокращений под все типы устройств.