Для начала работы с Shepherd.js необходимо подключить библиотеку в проект. Существует несколько способов: через npm, Yarn или CDN. При использовании npm:
npm install shepherd.js
И затем импорт в модуле:
import Shepherd from 'shepherd.js';
import 'shepherd.js/dist/css/shepherd.css';
Через CDN достаточно подключить CSS и JS в HTML:
<link rel="stylesheet" href="https://unpkg.com/shepherd.js/dist/css/shepherd.css" />
<script src="https://unpkg.com/shepherd.js/dist/js/shepherd.min.js"></script>
Создание нового экземпляра тура:
const tour = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true,
cancelIcon: {
enabled: true
}
},
useModalOverlay: true
});
Здесь ключевые параметры:
scrollTo – автоматически прокручивает страницу до
элемента.cancelIcon – добавляет крестик для отмены тура.useModalOverlay – затемняет фон, фокусируя внимание на
шаге.Шаги определяются методом addStep и включают текст,
прикрепление к элементу и кнопки управления:
tour.addStep({
id: 'intro',
text: 'Это начальный шаг тура.',
attachTo: {
element: '.intro-element',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
Ключевые моменты:
id – уникальный идентификатор шага.text – содержимое подсказки, поддерживаются
HTML-теги.attachTo – объект с element (CSS селектор)
и on (позиция: top, bottom, left, right).buttons – массив объектов с текстом кнопки и функцией
действия.Дополнительно можно использовать события шага:
tour.on('show', function() {
console.log('Шаг показан');
});
tour.on('complete', function() {
console.log('Тур завершен');
});
1. Vue.js
В проектах на Vue.js удобно использовать ref для
элементов и динамически подключать шаги Shepherd:
import { ref, onMounted } from 'vue';
import Shepherd from 'shepherd.js';
export default {
setup() {
const buttonRef = ref(null);
onMounted(() => {
const tour = new Shepherd.Tour({
defaultStepOptions: { scrollTo: true }
});
tour.addStep({
id: 'vue-step',
text: 'Кнопка Vue.js',
attachTo: { element: buttonRef.value, on: 'bottom' },
buttons: [{ text: 'Далее', action: tour.next }]
});
tour.start();
});
return { buttonRef };
}
}
2. React
В React можно использовать useEffect для инициализации
тура после рендеринга компонентов:
import { useEffect, useRef } from 'react';
import Shepherd from 'shepherd.js';
function TourComponent() {
const buttonRef = useRef(null);
useEffect(() => {
const tour = new Shepherd.Tour({
defaultStepOptions: { scrollTo: true }
});
tour.addStep({
id: 'react-step',
text: 'Кнопка React',
attachTo: { element: buttonRef.current, on: 'right' },
buttons: [{ text: 'Далее', action: tour.next }]
});
tour.start();
}, []);
return <button ref={buttonRef}>Нажми меня</button>;
}
3. Angular
В Angular интеграция выполняется через сервис или хук
ngAfterViewInit:
import { AfterViewInit, Component, ViewChild, ElementRef } from '@angular/core';
import Shepherd from 'shepherd.js';
@Component({
selector: 'app-tour',
template: `<button #btn>Кнопка Angular</button>`
})
export class TourComponent implements AfterViewInit {
@ViewChild('btn') button!: ElementRef;
ngAfterViewInit() {
const tour = new Shepherd.Tour({
defaultStepOptions: { scrollTo: true }
});
tour.addStep({
id: 'angular-step',
text: 'Кнопка Angular',
attachTo: { element: this.button.nativeElement, on: 'top' },
buttons: [{ text: 'Далее', action: tour.next }]
});
tour.start();
}
}
1. Работа с анимацией
Shepherd.js можно комбинировать с GSAP для создания плавного появления подсказок:
tour.on('show', () => {
gsap.from('.shepherd-element', { opacity: 0, y: -20, duration: 0.5 });
});
2. Интеграция с библиотекой форм
Для форм, построенных с помощью Formik или
Vue Formulate, удобно использовать
attachTo на динамически создаваемых элементах и обновлять
тур при изменении DOM:
form.on('fieldAdded', (field) => {
tour.addStep({
id: `field-${field.name}`,
text: `Поле ${field.label}`,
attachTo: { element: field.element, on: 'right' },
buttons: [{ text: 'Далее', action: tour.next }]
});
});
3. Поддержка модальных окон
Shepherd.js поддерживает туры внутри модальных окон. Важно вызывать
tour.start() после того, как модальное окно полностью
показано:
modal.on('shown.bs.modal', () => {
tour.start();
});
В крупных приложениях часто требуется генерировать шаги на основе данных:
const stepsData = [
{ id: 'step1', element: '.el1', text: 'Первый элемент' },
{ id: 'step2', element: '.el2', text: 'Второй элемент' },
{ id: 'step3', element: '.el3', text: 'Третий элемент' }
];
stepsData.forEach(step => {
tour.addStep({
id: step.id,
text: step.text,
attachTo: { element: step.element, on: 'bottom' },
buttons: [{ text: 'Далее', action: tour.next }]
});
});
Такой подход облегчает поддержку большого числа шагов, особенно при интеграции с динамическими интерфейсами и сторонними компонентами.
tour.start() после
рендеринга соответствующих компонентов.show, hide,
complete) для синхронизации с внешними библиотеками.Эти методы обеспечивают надежную интеграцию Shepherd.js с любыми сторонними библиотеками и позволяют создавать гибкие и интерактивные туры по приложению.