Как сделать кликабельные ссылки внутри 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.

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

Как в javascript получить реальные размеры картинки (тег img)

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

Довольно часто картинка на странице показывается в масштабе, и при попытке определить её размеры из скрипта вы получите размер контейнера, а не самой картинки. Разберемся как получать реальные размеры изображения. В общем, нет особых хитростей. ...

Читать

Улучшаем реакцию меню

Апрель 28, 2016 г.

Pull-down - выпадающим меню, работающим на javascript, никого не удивить. Мне не нравится, что оно закрывается мгновенно, как курсор мыши выходит за край выпавшей секции. Немного промахнешься (особенно это часто случается с последними пунктами), и меню ...

Читать

Программируем галерею в Drupal 7

Сентябрь 2, 2015 г.

Хотите сделать галерею своими руками, без сторонних модулей в Drupal? Тогда читайте дальше. Настроим поле для галереи Для начала нам надо определиться, ...

Читать

Связанные списки select с получением данных по ajax

Декабрь 15, 2016 г.

В прошлый раз я показывал как можно "на лету" создавать списки html select, данные которых содержались в специальном javascript массиве. Подготовить такой ...

Читать
 

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

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



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