Tooltipster — это современная библиотека для создания красивых и кастомизируемых всплывающих подсказок. Для интеграции с Vue необходимо установить саму библиотеку и её стили через npm или yarn:
npm install tooltipster jquery
После установки в main.js подключаются стили и
скрипты:
import 'tooltipster/dist/css/tooltipster.bundle.min.css';
import $ from 'jquery';
import 'tooltipster';
Важно помнить, что Tooltipster зависит от jQuery, поэтому его необходимо импортировать в проект до самой библиотеки.
Для работы с Vue оптимально использовать хуки жизненного цикла
компонента. Инициализация выполняется в mounted(), чтобы
гарантировать наличие DOM-элементов:
export default {
mounted() {
$(this.$refs.tooltip).tooltipster({
content: 'Пример подсказки',
theme: 'tooltipster-light',
delay: 200,
interactive: true
});
}
}
В шаблоне создается элемент с ref:
<button ref="tooltip">Наведи на меня</button>
Использование ref позволяет получить доступ к
конкретному DOM-элементу и инициализировать на нем Tooltipster без
конфликтов с другими элементами.
Tooltipster предоставляет обширный набор опций, среди которых:
content — текст или HTML, который будет отображаться в
подсказке. Можно использовать Vue-компоненты через рендеринг HTML.theme — визуальная тема подсказки. В библиотеке
поставляются стандартные темы, но возможна кастомизация через CSS.delay — задержка появления в миллисекундах.interactive — делает подсказку интерактивной, позволяя
пользователю кликать по ссылкам или кнопкам внутри неё.trigger — событие, которое вызывает подсказку
(hover, click, custom).maxWidth — максимальная ширина подсказки.animation — тип анимации (fade,
grow, swing и др.).Пример с расширенной конфигурацией:
$(this.$refs.tooltip).tooltipster({
content: $('<span>Подсказка с <b>HTML</b></span>'),
theme: 'tooltipster-punk',
delay: 300,
interactive: true,
trigger: 'click',
maxWidth: 250,
animation: 'grow'
});
В Vue часто возникает необходимость менять текст подсказки
динамически. Tooltipster предоставляет метод content для
обновления:
this.tooltipInstance = $(this.$refs.tooltip).tooltipster({
content: 'Начальный текст',
theme: 'tooltipster-light'
});
this.tooltipInstance.tooltipster('content', 'Новый текст подсказки');
Можно привязать содержимое подсказки к реактивному свойству Vue:
data() {
return {
tooltipText: 'Исходный текст'
}
},
mounted() {
this.tooltipInstance = $(this.$refs.tooltip).tooltipster({
content: this.tooltipText
});
},
watch: {
tooltipText(newVal) {
this.tooltipInstance.tooltipster('content', newVal);
}
}
Для отображения полноценного Vue-компонента внутри подсказки требуется предварительно срендерить компонент и передать его в Tooltipster:
import MyTooltipComponent from './MyTooltipComponent.vue';
import { createApp } from 'vue';
mounted() {
const container = document.createElement('div');
createApp(MyTooltipComponent).mount(container);
$(this.$refs.tooltip).tooltipster({
content: container,
interactive: true
});
}
Это позволяет использовать все возможности Vue — реактивность, слоты и события — внутри всплывающей подсказки.
Tooltipster предоставляет методы для управления подсказкой:
open() — открыть подсказку вручную.close() — закрыть подсказку.destroy() — полностью удалить подсказку и освободить
память.Пример интеграции с методами компонента Vue:
methods: {
showTooltip() {
this.tooltipInstance.tooltipster('open');
},
hideTooltip() {
this.tooltipInstance.tooltipster('close');
}
}
События Tooltipster можно обрабатывать через опцию
functionReady, functionBefore,
functionAfter:
$(this.$refs.tooltip).tooltipster({
functionReady: function(instance, helper) {
console.log('Подсказка готова к показу');
}
});
При работе с динамическими списками (например, через
v-for) важно инициализировать Tooltipster после рендера
элементов. Для этого используется $nextTick:
this.$nextTick(() => {
this.items.forEach(item => {
$(item.ref).tooltipster({ content: item.text });
});
});
Это гарантирует корректное связывание Tooltipster с DOM-элементами после всех изменений Vue.
Tooltipster позволяет создавать собственные темы через CSS. Минимальная структура темы:
.tooltipster-mytheme {
background: #333;
color: #fff;
border-radius: 6px;
padding: 8px 12px;
font-size: 14px;
}
.tooltipster-mytheme .tooltipster-arrow {
border-top-color: #333;
}
Подключение темы через опцию theme:
$(this.$refs.tooltip).tooltipster({
theme: 'tooltipster-mytheme'
});
Это позволяет точно настроить внешний вид подсказок под дизайн проекта.
Tooltipster в связке с Vue обеспечивает мощный и гибкий инструмент для реализации сложных интерактивных подсказок, полностью интегрированных с реактивной системой компонентов.