Класс Tooltip в Leaflet предназначен для отображения
всплывающих подсказок, привязанных к карте или её слоям. Подсказка
представляет собой компактный HTML-блок, который появляется при
взаимодействии с объектом карты или при наведении курсора. В отличие от
Popup, Tooltip обычно менее навязчив и
используется для кратких текстовых обозначений.
Tooltip в Leaflet является расширением базового класса
DivOverlay. Это означает, что подсказка:
Подсказки не создаются напрямую через new L.Tooltip(),
хотя это возможно, но чаще используются через методы
bindTooltip у слоёв.
Основной способ работы с подсказками — привязка к объекту слоя.
marker.bindTooltip("Простая подсказка");
Такой вызов автоматически создаёт экземпляр Tooltip и
связывает его с маркером. Подсказка будет отображаться при наведении
курсора.
Низкоуровневое создание позволяет более тонко управлять поведением:
const tooltip = L.tooltip({
direction: "top",
offset: [0, -10],
opacity: 0.9
})
.setContent("Динамическая подсказка");
Далее подсказка может быть добавлена к карте:
tooltip.setLatLng([51.505, -0.09]).addTo(map);
Определяет положение подсказки относительно точки привязки.
Возможные значения:
topbottomleftrightcenterautoПри auto Leaflet автоматически выбирает направление,
минимизируя выход за границы карты.
Смещение подсказки относительно точки привязки:
offset: [10, -20]
Первое значение — горизонтальное смещение, второе — вертикальное.
Контролирует прозрачность:
opacity: 0.7
Если установлено в true, подсказка отображается
постоянно:
marker.bindTooltip("Всегда видимая подсказка", {
permanent: true
});
Опция sticky делает подсказку “следующей” за
курсором:
marker.bindTooltip("Следует за курсором", {
sticky: true
});
Позволяет взаимодействовать с содержимым Tooltip (клики, выделение текста):
interactive: true
Без этой опции все события проходят сквозь подсказку на карту.
Позволяет задавать CSS-класс для кастомизации:
className: "custom-tooltip"
Изменение содержимого:
tooltip.setContent("Новый текст");
Поддерживается HTML:
tooltip.setContent("<b>Жирный текст</b>");
Обновление позиции:
tooltip.setLatLng([51.51, -0.1]);
Получение текущего содержимого:
const content = tooltip.getContent();
Возвращает координаты привязки:
const latlng = tooltip.getLatLng();
Добавление и удаление с карты:
tooltip.addTo(map);
tooltip.remove();
Tooltip может быть связан с любым пространственным объектом:
L.marker([51.5, -0.09])
.bindTooltip("Маркер в Лондоне")
.addTo(map);
L.polyline([
[51.5, -0.1],
[51.51, -0.12]
]).bindTooltip("Маршрут");
L.polygon([
[51.509, -0.08],
[51.503, -0.06],
[51.51, -0.047]
]).bindTooltip("Область");
По умолчанию Tooltip открывается при mouseover и
закрывается при mouseout. Поведение можно
контролировать:
marker.bindTooltip("Подсказка", {
permanent: false,
direction: "top"
});
Можно также вручную управлять открытием:
marker.openTooltip();
marker.closeTooltip();
Tooltip поддерживает стандартные события жизненного цикла:
tooltipopentooltipcloseПример:
marker.on("tooltipopen", function (e) {
console.log("Tooltip открыт");
});
DOM-структура Tooltip содержит корневой элемент с классом:
.leaflet-tooltip
Направление добавляет модификаторы:
leaflet-tooltip-topleaflet-tooltip-bottomleaflet-tooltip-leftleaflet-tooltip-rightПример кастомизации:
.custom-tooltip {
background: #222;
color: #fff;
border-radius: 4px;
padding: 6px 10px;
font-size: 13px;
box-shadow: 0 2px 6px rgba(0,0,0,0.3);
}
Tooltip часто используется для отображения изменяющихся данных.
marker.bindTooltip(() => {
return "Время: " + new Date().toLocaleTimeString();
});
Или обновление по событию:
marker.on("move", function (e) {
marker.setTooltipContent("Lat: " + e.latlng.lat);
});
Tooltip и Popup часто используются совместно, но имеют различия:
Комбинация:
marker.bindTooltip("Кратко").bindPopup("Подробно");
Tooltip можно перепривязывать:
marker.unbindTooltip();
marker.bindTooltip("Новое содержимое");
Tooltip учитывает:
При выходе за границы карты применяется автоматическая корректировка
позиции, особенно при direction: "auto".
Tooltip поддерживает HTML, но не выполняет sanitization автоматически:
marker.bindTooltip("<img src='x' />");
Поэтому любые динамические данные должны быть предварительно очищены.
При большом количестве Tooltip на карте:
bindTooltip вместо
ручного создания;interactive: true без необходимости;sticky только для ограниченного числа
объектов.Tooltip реализует механизм overlay:
L.DomUtil.create;zoom и
move;tooltipPane.Это позволяет интегрировать его в систему слоёв Leaflet без отдельного рендера.