Singleton режим в Tippy.js позволяет объединить несколько всплывающих подсказок в один объект, чтобы управлять их поведением централизованно. Это удобно для создания единообразного пользовательского интерфейса, где только одна подсказка отображается одновременно, а остальные автоматически скрываются. Однако при его использовании есть ряд важных ограничений и особенностей, которые необходимо учитывать для корректной работы приложения.
В singleton режиме все подсказки объединяются под одной конфигурацией. Это означает, что нельзя назначить уникальные настройки контента для каждой подсказки, которые зависят от динамических данных, если они отличаются от общей конфигурации singleton.
Например, если одна подсказка должна показывать текст, а другая – HTML-контент с кнопками, стандартный singleton не позволит автоматически поддерживать разный HTML для каждой подсказки.
Решение: использовать коллбэки onShow
или onMount для динамического изменения содержимого, но при
этом нужно быть осторожным, так как изменение содержимого влияет
на все экземпляры singleton до скрытия следующей подсказки.
В singleton режиме обработчики событий, назначенные
на отдельные tippy-экземпляры (onShow, onHide,
onTrigger), могут работать нестабильно или не срабатывать
так, как ожидалось. Это связано с тем, что singleton управляет
жизненным циклом всех дочерних подсказок централизованно.
onShow для отдельной подсказки может не вызваться, если
другая подсказка уже активна.onHide вызывается не сразу при уходе курсора, а в
момент, когда singleton решает скрыть подсказку.Следствие: привязка сложной логики к отдельным событиям tippy в singleton может привести к неожиданному поведению.
Singleton использует единую конфигурацию placement, offset и popperOptions для всех объединённых подсказок.
placement или
offset для дочерних подсказок не даст результата – все
подсказки будут следовать за параметрами singleton.Решение: для уникального позиционирования каждой
подсказки необходимо либо отказаться от singleton, либо динамически
менять конфигурацию через методы setProps() при показе
конкретной подсказки.
Все подсказки в singleton делят одну анимацию. Если требуется уникальная анимация для каждой подсказки (например, fade для одной и scale для другой), singleton не сможет это обеспечить.
duration,
easing) применяются ко всем дочерним подсказкам.Обходной путь: использовать кастомные коллбэки
onShow/onMount для временной замены класса
анимации, но это усложняет поддержку и может привести к визуальным
“рывкам”.
Если DOM-элементы, к которым привязаны tippy, динамически создаются или удаляются, singleton может вести себя нестабильно:
Рекомендация: пересоздавать singleton или обновлять
его список через метод setInstances() при изменении
элементов.
Singleton предоставляет методы для управления всеми подсказками
одновременно (show(), hide(),
disable(), enable()). Однако:
instance.unmount().Tippy.js поддерживает плагины (например, followCursor,
sticky), но в singleton:
followCursor применится только к общей
конфигурации singleton, а не к каждой подсказке отдельно.Эти ограничения делают singleton мощным инструментом для централизованного управления подсказками, но одновременно накладывают строгие рамки на индивидуальные настройки каждой подсказки, которые нужно учитывать при разработке интерфейсов.