Для использования Shepherd.js в Svelte необходимо сначала установить библиотеку через npm или yarn:
npm install shepherd.js
или
yarn add shepherd.js
Затем в компоненте Svelte подключается CSS-стилизация и сам скрипт:
<script>
import Shepherd from 'shepherd.js';
import 'shepherd.js/dist/css/shepherd.css';
</script>
CSS-файл необходим для корректного отображения подсказок, стрелок и кнопок навигации.
Тур в Shepherd создается через класс Shepherd.Tour.
Основные параметры включают:
Пример инициализации тура:
<script>
let tour;
function initializeTour() {
tour = new Shepherd.Tour({
defaultStepOptions: {
classes: 'shepherd-theme-arrows',
scrollTo: true,
showCancelLink: true
},
useModalOverlay: true
});
tour.addStep({
id: 'step-1',
text: 'Это первый шаг тура.',
attachTo: { element: '.first-element', on: 'bottom' },
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
tour.addStep({
id: 'step-2',
text: 'Это второй шаг тура.',
attachTo: { element: '.second-element', on: 'top' },
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Закрыть',
action: tour.complete
}
]
});
}
function startTour() {
if (!tour) initializeTour();
tour.start();
}
</script>
Ключевым моментом является attachTo,
который связывает шаг с DOM-элементом и указывает положение подсказки
относительно него.
Svelte управляет DOM через реактивные переменные, поэтому элементы, к
которым привязывается тур, могут появляться динамически. Важно запускать
initializeTour после того, как элементы появятся в
DOM. Это решается через $:, onMount
или события:
<script>
import { onMount } from 'svelte';
onMount(() => {
initializeTour();
});
</script>
Если шаги должны появляться после асинхронной загрузки данных, следует убедиться, что селекторы целевых элементов уже существуют.
Shepherd позволяет настраивать шаги глубоко:
show, hide, completeПример автоматического перехода на следующий шаг при клике на элемент:
tour.addStep({
id: 'step-3',
text: 'Нажмите на кнопку, чтобы продолжить.',
attachTo: { element: '.continue-btn', on: 'right' },
advanceOn: { selector: '.continue-btn', event: 'click' }
});
Shepherd поддерживает темы через CSS-классы:
shepherd-theme-arrows — стандартная стрелочная
темаshepherd-theme-default — классическаяclasses в
defaultStepOptions или на уровне шагаdefaultStepOptions: {
classes: 'custom-shepherd-theme',
scrollTo: { beh * avior: 'smooth', block: 'center' }
}
В Svelte удобнее создавать отдельный CSS-файл или
<style> в компоненте с нужными стилями и подключать
через classes.
Тур можно инкапсулировать в отдельный компонент:
<script>
import { onMount } from 'svelte';
import Shepherd from 'shepherd.js';
import 'shepherd.js/dist/css/shepherd.css';
export let start = false;
let tour;
onMount(() => {
tour = new Shepherd.Tour({
defaultStepOptions: { classes: 'shepherd-theme-arrows', scrollTo: true },
useModalOverlay: true
});
tour.addStep({ id: 'step-1', text: 'Привет!', buttons: [{ text: 'Далее', action: tour.next }] });
if (start) tour.start();
});
$: if (start && tour) tour.start();
</script>
Такой компонент можно использовать с пропсом
start={true}, чтобы запускать тур автоматически или через
реактивную переменную.
Shepherd предоставляет события на уровне тура и шагов:
show — шаг показываетсяhide — шаг скрываетсяcomplete — тур завершенcancel — тур отмененПример подписки на событие завершения тура:
tour.on('complete', () => {
console.log('Тур завершен');
});
В Svelte можно обновлять состояние приложения на основе этих событий, связывая их с реактивными переменными или store.
onMount и $: реактивные блоки.Эти подходы обеспечивают плавную интеграцию Shepherd.js с Svelte, позволяя создавать интерактивные пошаговые подсказки, адаптированные под динамический интерфейс и реактивные данные.