Как создать всплывающую подсказку в формате SVG?

Учитывая существующий действительный документ SVG, как лучше всего создавать «информационные всплывающие окна», чтобы при наведении указателя мыши или щелчке на определенных элементах (скажем) вы открывали окно с произвольным количеством (т.е. не просто всплывающей подсказкой из одной строки) Дополнительная информация?

Это должно отображаться правильно, по крайней мере, в Firefox, и быть невидимым, если изображение было растеризовано в растровый формат.

Мораис, это может помочь, если вы немного сузите вопрос. Может быть, более конкретно о том, какие технологии вам доступны и какие браузеры вам нужно поддерживать (Firefox и что еще?) Просто предложение.

Onorio Catenacci 19.09.2008 19:27

Принятый ответ теперь устарел, но ответ Нила Фрейзера по-прежнему верен.

Craig 22.12.2014 02:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
43
2
64 328
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

<svg>
  <text id = "thingyouhoverover" x = "50" y = "35" font-size = "14">Mouse over me!</text>
  <text id = "thepopup" x = "250" y = "100" font-size = "30" fill = "black" visibility = "hidden">Change me
    <set attributeName = "visibility" from = "hidden" to = "visible" begin = "thingyouhoverover.mouseover" end = "thingyouhoverover.mouseout"/>
  </text>
</svg>

Дальнейшее объяснение можно найти в здесь.

Похоже, это не работает в Firefox 3.0.1 - это должно быть?

morais 22.09.2008 19:01

Ссылка на сайт IBM сейчас не работает.

kasuparu 04.03.2014 12:07

@kasuparu Я только что отправил в ibm отзыв о неработающей ссылке. Некоторые файлы в этом каталоге все еще существуют, поэтому это может быть ошибкой.

Sparr 04.03.2014 22:42

голосование против, потому что ссылка не была исправлена.

Eric Bloch 30.07.2015 01:21

Я отправил в IBM запрос на восстановление удаленного содержимого по ссылке.

Sparr 27.10.2015 23:47

изменил ссылку на archive.org

Sparr 14.11.2015 06:52

Поскольку элемент <set> не работает с Firefox 3, я думаю, вам нужно использовать ECMAScript.

Если вы добавите в свой SVG следующий элемент скрипта:

  <script type = "text/ecmascript"> <![CDATA[

    function init(evt) {
        if ( window.svgDocument == null ) {
        // Define SGV
        svgDocument = evt.target.ownerDocument;
        }
        tooltip = svgDocument.getElementById('tooltip');
    }

    function ShowTooltip(evt) {
        // Put tooltip in the right position, change the text and make it visible
        tooltip.setAttributeNS(null,"x",evt.clientX+10);
        tooltip.setAttributeNS(null,"y",evt.clientY+30);
        tooltip.firstChild.data = evt.target.getAttributeNS(null,"mouseovertext");
        tooltip.setAttributeNS(null,"visibility","visible");
    }

    function HideTooltip(evt) {
        tooltip.setAttributeNS(null,"visibility","hidden");
    }
    ]]></script>

Вам нужно добавить onload = "init(evt)" в элемент SVG для вызова функции init ().

Затем в конец SVG добавьте текст всплывающей подсказки:

<text id = "tooltip" x = "0" y = "0" visibility = "hidden">Tooltip</text>

Наконец, к каждому элементу, который вы хотите использовать с помощью функции наведения курсора мыши, добавьте:

onmousemove = "ShowTooltip(evt)"
onmouseout = "HideTooltip(evt)"
mouseovertext = "Whatever text you want to show"

Я написал более подробное объяснение с улучшенной функциональностью на http://www.petercollingridge.co.uk/interactive-svg-components/tooltip

Я еще не включил многострочные всплывающие подсказки, для которых потребовалось бы несколько элементов <tspan> и ручной перенос слов.

Этот вопрос был задан в 2008 году. За прошедшие четыре года SVG быстро улучшилась. Теперь всплывающие подсказки полностью поддерживаются на всех известных мне платформах. Используйте тег <title> (не атрибут), и вы получите встроенную всплывающую подсказку.

Вот документы: https://developer.mozilla.org/en-US/docs/SVG/Element/title

Примечание. Кажется, это не работает, если вы добавляете его динамически с помощью javascript.

bzuillsmith 16.04.2013 03:24

Кроме того, вы не можете стилизовать собственные подсказки к инструментам :(

CpILL 01.08.2013 07:30

Я использовал это с фреймворком визуализации d3, чтобы добавить всплывающую подсказку с помощью javascript, и это сработало для меня в последних версиях chrome и firefox. Код был что-то вроде chart.selectAll("g.cell.child").append("title").text(functio‌​n(d) { return d.size;} );

Pat 16.09.2013 18:42

Кажется, это работает в Firefox (50.0), но не в Chrome (54.0.2840.100).

joelittlejohn 28.11.2016 16:34

Это должно работать:

nodeEnter.append("svg:element")
   .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; })
   .append("svg:title")
   .text(function(d) {return d.Name+"\n"+d.Age+"\n"+d.Dept;}); // It shows the tool tip box with item [Name,Age,Dept] and upend to the svg dynamicaly

Другие вопросы по теме