Подтвердить что ты не робот

Google Charts - полный html в подсказках

Я пытаюсь настроить пользовательские подсказки Google Charts с полным HTML в них.

Я знаю, как включать всплывающие подсказки и передавать соответствующие данные - проблема в том, что даже когда опция allowHTML включена, всплывающие подсказки отображаются как обычный текст, поэтому, например, я не могу показать изображение в подсказке.

Вот небольшой пример того, что я собираюсь сделать:

Что у меня сейчас: plain text in tooltip

Что я хочу: picture in tooltip

Один из способов решения этой проблемы - отключить всплывающие подсказки, захватить события onmouseover и использовать другую библиотеку (например, cluetip) для отображения всплывающих подсказок по курсору, но мне было интересно, есть ли более чистый, собственный способ включить такую ​​функциональность в Графики Google.

Также, пожалуйста, ознакомьтесь с моим другим вопросом об изображениях как маркеров точки в диаграммах Google.

Edit:

В то же время я нашел очень хорошую и довольно недорогую библиотеку (60 $за сайт), которая охватывает эту функциональность: Highcharts library

Как вы можете видеть в примере, можно передать функцию, которая будет форматировать всплывающие подсказки - достаточно легко добавить специальное свойство для каждого datapoint, содержащего URL-адрес, который можно использовать для динамической загрузки содержимого всплывающих подсказок. Затем всплывающие подсказки можно кэшировать, добавляя дополнительное свойство к каждой точке данных в серии. Я реализовал его таким образом, и он отлично работает.

Надеюсь, что последнее редактирование поможет кому-то.

4b9b3361

Ответ 1

В Google приведен пример здесь.

Вам нужно будет указать столбец для подсказки html:

data.addColumn({'type': 'string', 'role': 'tooltip', 'p': {'html': true}});

Вам также необходимо передать правильный вариант в диаграмму:

tooltip: {isHtml: true}

Я проверил это с помощью линейной диаграммы, и она работает.

Изменить: он также выглядит (по крайней мере, для линейной диаграммы), для этого вам нужно использовать обертка диаграммы. Я не мог заставить его подчиняться параметрам без оболочки.

Ответ 2

Эта функция была невероятно неясной! Ключ для меня, как отмечалось ранее, заключался в добавлении ", 'p': {'html: true}" при использовании' addColumn() 'для определения всплывающей подсказки; "draw" () "option" tooltip: {isHtml: true} 'недостаточно.

Очень удобно использовать вызов функции для возврата строки HTML при создании массива 'graphItems', который передается в 'addRows()':

function myToolTip(row) {
    return '<div style="white-space: nowrap; padding:5px;"><b>' + row.name + '</b><br>' +
        '$' + row.worth + ' B, <b>' + _scope.sortBy + '</b>: ' + row[_scope.sortBy] + '</div>';
}

var graphItems = [];
angular.forEach(_scope.ForbesList, function(row, key) {
    graphItems.push([key, row.worth, myToolTip(row)]);
});

var data = new google.visualization.DataTable();
data.addColumn('number', 'Rank');
data.addColumn('number', 'Worth');
data.addColumn({type: 'string', role: 'tooltip', 'p': {'html': true}});
data.addRows(graphItems);

Подробнее здесь: https://developers.google.com/chart/interactive/docs/customizing_tooltip_content#custom_html_content

Ответ 3

В настоящее время это работает для меня:

Шаг 1: убедитесь, что обе эти настройки указаны в параметрах диаграммы:

// This line makes the entire category tooltip active.
focusTarget: 'category',
// Use an HTML tooltip.
tooltip: { isHtml: true }

Шаг 2: добавьте подсказку в один из столбцов диаграммы:

dataTable.addColumn({'type': 'string', 'role': 'tooltip' , 'p': {'html': true}});

Шаг 3. В ваших данных добавьте HTML-код для своей всплывающей подсказки в соответствующем столбце:

chartReading.push(chartSensorTooltip(obsDate, reading[1]));

Метод "chartSensorTooltip (date, number)" - это метод JS, который я написал для правильного форматирования HTML-подсказки для каждого значения. Вам не нужно писать такой метод, но, как кто-то предложил выше, сделать так легко форматировать все всплывающие подсказки тем же способом.

The FocusTarget - вот что сбило меня с толку. HTH кто-то!

Ответ 4

Мне пришлось добавить {p: {html: true}} к каждой строке данных вместо столбца, а также к опции isHtml для всей диаграммы.