Tooltipster изначально разрабатывался для работы с HTML-элементами,
такими как <div>, <span>,
<button> и т. д. Однако интеграция с SVG требует
некоторых особенностей, так как SVG элементы имеют иной DOM-поведение и
события, чем стандартные HTML-элементы. Для начала необходимо убедиться,
что библиотека подключена корректно:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tooltipster@4.2.8/dist/css/tooltipster.bundle.min.css" />
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/tooltipster@4.2.8/dist/js/tooltipster.bundle.min.js"></script>
SVG элементы должны быть обернуты в контейнер с атрибутом
class или id, чтобы Tooltipster мог корректно
их инициализировать. Например:
<svg width="200" height="200">
<circle id="circle1" cx="50" cy="50" r="40" fill="blue" />
<rect id="rect1" x="100" y="20" width="80" height="60" fill="green" />
</svg>
Инициализация Tooltipster для SVG элементов выглядит следующим образом:
$('#circle1').tooltipster({
content: 'Это круг',
theme: 'tooltipster-light',
animation: 'fade',
delay: 200
});
$('#rect1').tooltipster({
content: 'Это прямоугольник',
theme: 'tooltipster-light',
animation: 'grow',
delay: 200
});
События мыши: SVG элементы часто используют
события mouseenter и mouseleave для
отображения всплывающих подсказок. Tooltipster автоматически
обрабатывает эти события, но в случае сложных SVG с наложением элементов
может потребоваться добавление pointer-events: all в CSS,
чтобы элементы реагировали на курсор.
svg * {
pointer-events: all;
}Позиционирование подсказки: Tooltipster
рассчитывает положение подсказки относительно элемента, но SVG может
иметь трансформации (transform, scale,
translate). Для корректного отображения рекомендуется
использовать опцию functionPosition:
$('#circle1').tooltipster({
content: 'Круг с трансформацией',
functionPosition: function(instance, helper, position){
position.coord.top += 10; // смещение по вертикали
position.coord.left += 5; // смещение по горизонтали
return position;
}
});Поддержка динамических SVG элементов: Если SVG создаётся динамически через JavaScript или D3.js, Tooltipster нужно инициализировать после вставки элемента в DOM:
let newCircle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
newCircle.setAttribute('cx', 150);
newCircle.setAttribute('cy', 150);
newCircle.setAttribute('r', 30);
newCircle.setAttribute('fill', 'red');
newCircle.setAttribute('id', 'dynamicCircle');
document.querySelector('svg').appendChild(newCircle);
$('#dynamicCircle').tooltipster({
content: 'Динамически добавленный круг',
theme: 'tooltipster-noir'
});Tooltipster поддерживает как текст, так и HTML-контент. Для SVG элементов это особенно полезно для добавления сложных структур внутри подсказки:
$('#rect1').tooltipster({
content: $('<div><strong>Прямоугольник</strong><br>Ширина: 80, Высота: 60</div>'),
theme: 'tooltipster-punk',
interactive: true
});
Опция interactive: true позволяет взаимодействовать с
элементами внутри подсказки, например, кнопками или ссылками.
Для визуального соответствия SVG-элементам можно использовать различные темы и анимации Tooltipster:
animation: 'fade' — плавное
появление/исчезновение.animation: 'grow' — подсказка растёт от центра
элемента.theme: 'tooltipster-light' — светлая тема с минимальным
оформлением.theme: 'tooltipster-noir' — тёмная строгая тема для
контрастных SVG.$('#circle1').tooltipster({
content: 'Круг с анимацией grow',
theme: 'tooltipster-noir',
animation: 'grow',
delay: 150
});
Если нужно добавить подсказки на несколько элементов одновременно, можно использовать общий селектор:
$('svg circle, svg rect').tooltipster({
content: 'Элемент SVG',
theme: 'tooltipster-light',
animation: 'fade',
delay: 200
});
Для каждого элемента можно переопределять контент с помощью функции:
$('svg *').tooltipster({
content: function() {
return $(this).attr('id') ? 'ID: ' + $(this).attr('id') : 'SVG элемент';
},
theme: 'tooltipster-light',
animation: 'fade'
});
Если SVG имеет viewBox или изменяется масштаб через CSS
(transform: scale()), подсказки могут смещаться. Чтобы
сохранить корректное позиционирование, рекомендуется использовать опцию
position: 'bottom' или функции
functionPosition для точного расчета координат.
Пошаговое соблюдение этих принципов обеспечивает стабильную и гибкую работу Tooltipster с SVG элементами, включая динамически создаваемые графические объекты и сложные трансформации.