Как сделать кликабельные ссылки внутри SVG при использовании Fancybox

Когда вы используете Fancybox для отображения изображений, SVG и других медиа-объектов, возникает интересная проблема: если внутри SVG находятся ссылки (<a>), они перестают работать. Почему? Потому что Fancybox «перехватывает» клик, и вы не попадаете на нужный href.

Вот простое решение этой задачи.

Описание проблемы

Допустим, у нас есть SVG с интерактивными областями:

При клике на этот текст откроется Fancybox, а не https://example.com.

Решение

Мы будем перехватывать клики до того, как Fancybox обработает их. Если клик был по <a> внутри <svg>, мы останавливаем всплытие события:

Как это работает?

  • Мы вешаем обработчик click на элементы с data-fancybox до инициализации самого Fancybox.
  • Если клик произошёл по ссылке внутри SVG, то closest('svg a') вернёт нужный элемент.
  • С помощью stopImmediatePropagation() мы предотвращаем запуск обработчиков Fancybox, и браузер спокойно перейдёт по ссылке.
  • Во всех остальных случаях Fancybox работает как обычно.

Бонус: проверка на мобильных

Если вы замечаете, что это не срабатывает на тач-устройствах — можно дублировать обработку на touchstart.

Мало букафф? Читайте есчо !

Обратный порядок перебора элементов jQuery each()

Сентябрь 17, 2019 г.

Полезное ноу-хау для тех кто пользуется jQuery. Функция $.each() производит перебор элементов по порядку, но иногда требуется выполнить операции в обратном порядке. jQuery ничего не предлагает для реализации нашей задачи, но это и не требуется, ...

Читать

Меняем поведение корневого пункта меню bootstrap dropdown

Апрель 14, 2022 г.

В bootstrap корневой пункт меню с подпунктами (dropdown menu) не является активной ссылкой и лишь служит кнопкой для развертывания подпунктов. Тем временем ...

Читать

Прокрутить HTML документ к заданной позиции

Июль 6, 2018 г.

Рассмотрим как программно установить позицию скролла документа ровно в начале нужного вам HTML контейнера. Чтобы сделать переход плавно, можно использовать функцию jQuery().animate(). Суть процесса такова - вычисляем вертикальную позицию требуемого ...

Читать

Как перезагрузить страницу из js

Сентябрь 20, 2018 г.

Наиболее широко встречается следующий способ: [crayon-695238cceea5b985623641/] Он инициирует setter локации, заставляя браузер выполнить переход на указанную страницу. Не все браузеры поддаются на данную уловку. Если не указать отличное от прежнего ...

Читать
 

Комментарии к «Как сделать кликабельные ссылки внутри SVG при использовании Fancybox»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: