подсказка chartjs html: используйте данные для заполнения всплывающей подсказки

#html #chart.js #tooltip

#HTML #chart.js #всплывающая подсказка

Вопрос:

Я обновляю веб-сайт, который 10 лет назад использовал highcharts, и конвертирую его в chartjs.

В данных было дополнительное поле для всплывающей подсказки, которое представляло собой строку html.

Пример:

 data: [
{x: 0,y:395.8,extra: 'Aug 11 2020 00:56:48<br/>12% <br>395.8  <br/>53.9 <br/>56.1 Inches, 95 u00B0F<br/>4.674 , 0 , 582 , 1000 , 00'},
{x: 1,y:390.2,extra: 'Aug 11 2020 01:56:48<br/>12% <br>390.2  <br/>53.1 <br/>56.2 Inches, 93.2 u00B0F<br/>4.681 , 0 , 582 , 1000 , 00'},
{x: 2,y:395.8,extra: 'Aug 11 2020 02:56:49<br/>12% <br>395.8  <br/>53.9 <br/>56.1 Inches, 93.2 u00B0F<br/>4.676 , 0 , 582 , 1000 , 00'}
}]
  

Мне было интересно, как сделать то же самое с chart.js .
Данные вводятся из базы данных PHP.
Итак, я могу изменить это из дополнительного поля, но куда мне его поместить?

Заранее спасибо. ( новое в chart.js извините)

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

1. Вы использовали тег Highcharts — пожалуйста, имейте в виду, что chart.js и Highcharts — это две разные автономные библиотеки.

Ответ №1:

Вы можете достичь желаемого, если отключите всплывающую подсказку по умолчанию и создадите пользовательскую.

Если у вас есть доступ к php API, я бы лично изменил данные так, чтобы дата располагалась по оси x, а не просто числами.

 var customTooltip = function(tooltip) {
  $(this._chart.canvas).css('cursor', 'pointer');

  var positionY = this._chart.canvas.offsetTop;
  var positionX = this._chart.canvas.offsetLeft;

  $('.chart-tooltip').css({
    opacity: 0
  });

  if (!tooltip || !tooltip.opacity) {
    return;
  }

  if (tooltip.dataPoints.length > 0) {
    tooltip.dataPoints.forEach(function(dataPoint) {
      var content = extra[dataPoint.index];

      $('#tooltip').html(content);
      $('#tooltip').css({
        opacity: 1,
        top: positionY   dataPoint.y   'px',
        left: positionX   dataPoint.x   'px',
      });
    });
  }
};
  

Я создал скрипку, чтобы продемонстрировать использование ваших данных: https://jsfiddle.net/y01ewbtz /

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

1. Когда я копирую весь код на страницу, отображается диаграмма, но всплывающая подсказка отображается не так, как в jsfiddle

2. Не могли бы вы подробнее остановиться на «не отображается так, как это происходит с jsfiddle», пожалуйста? это проблема с css / стилем или всплывающая подсказка вообще не отображается?

3. Теперь это работает. Добавлено больше данных, и одним из дополнительных была eztra

4. Datapoint.datasetIndex не увеличивается, поэтому всплывающая подсказка всегда является первой.

5. Извините за это, я не уверен, почему datasetIndex не увеличивается, в любом случае его можно заменить на index, пожалуйста, смотрите Новую скрипку