javascript - ChartJS v2 - 当用户单击多线图的一个点时保持工具提示打开

标签 javascript chart.js chart.js2

我使用 chartJS v2。

当用户单击多折线图的某个点时,我尝试让工具提示保持打开状态。工具提示必须包含一个横坐标值的每一行的数据。 我写了一个 chartJS 插件来做它,它可以工作,但它只显示一行的数据。

这是 fiddle :

https://jsfiddle.net/bencarbon/jrpLh8pa/

这是插件:

    var keepTooltipOpenPlugin = {

      beforeRender: function(chart) {

    // We are looking for bubble which owns "keepTooltipOpen" parameter.
        var datasets = chart.data.datasets;
        chart.pluginTooltips = [];
        for (i = 0; i < datasets.length; i++) {
          for (j = 0; j < datasets[i].data.length; j++) {
            if (datasets[i].data[j].keepTooltipOpen && !chart.getDatasetMeta(i).hidden) {
            //When we find one, we are pushing all informations to create the tooltip.
              chart.pluginTooltips.push(new Chart.Tooltip({
                _chart: chart.chart,
                _chartInstance: chart,
                _data: chart.data,
                _options: chart.options.tooltips,
                _active: [chart.getDatasetMeta(i).data[j]]
              }, chart));
            }
          }
        }
      }, // end beforeRender

      afterDatasetsDraw: function(chart, easing) {

          // Draw tooltips
          Chart.helpers.each(chart.pluginTooltips, function(tooltip) {
            tooltip.initialize();
            tooltip.update();
            tooltip.pivot();
            tooltip.transition(easing).draw();
          });


        } // end afterDatasetsDraw
    }

    Chart.pluginService.register(keepTooltipOpenPlugin);

我是这样使用的:

function handleClick(evt) {
    var activeElement = myLineChart.getElementAtEvent(evt);
    if(activeElement.length>0){
        var values = myLineChart.data.datasets[activeElement[0]._datasetIndex].data[activeElement[0]._index];
        if(values.keepTooltipOpen)
            values.keepTooltipOpen = false;
        else
          values.keepTooltipOpen = true;
    }
};

我应该如何修改我的插件以在工具提示中显示每行的数据?

谢谢

最佳答案

你的问题很有趣,所以我更新了 jsfiddle。如果您发现错误,请告诉我:

https://jsfiddle.net/bencarbon/jrpLh8pa/4/

这是新插件:

var keepTooltipOpenPlugin = {

      beforeRender: function(chart) {

    // We are looking for bubble which owns "keepTooltipOpen" parameter.
        var datasets = chart.data.datasets;
        chart.pluginTooltips = [];
    var abscissaToShow = chart.data.keepShowing;
    abscissaToShow.forEach(function(element) {
      var activeArray = [];
      for (i = 0; i < datasets.length; i++) {
        if(!chart.getDatasetMeta(i).hidden)
                activeArray.push(chart.getDatasetMeta(i).data[element])
      }
      chart.pluginTooltips.push(new Chart.Tooltip({
                _chart: chart.chart,
                _chartInstance: chart,
                _data: chart.data,
                _options: chart.options.tooltips,
                _active: activeArray
              }, chart));
    });
}, // end beforeRender

      afterDatasetsDraw: function(chart, easing) {

          // Draw tooltips
          Chart.helpers.each(chart.pluginTooltips, function(tooltip) {
            tooltip.initialize();
            tooltip.update();
            tooltip.pivot();
            tooltip.transition(easing).draw();
          });


        } // end afterDatasetsDraw
    }

    Chart.pluginService.register(keepTooltipOpenPlugin);

关于javascript - ChartJS v2 - 当用户单击多线图的一个点时保持工具提示打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843226/

相关文章:

Chart.JS 垂直线与 Moment.JS 水平轴

javascript - 在 Chart.js 中向圆环图添加标签会显示每个图表中的所有值

javascript - 将元素拖放到谷歌地图外部/内部

javascript - 使 Chart.js 雷达标签可点击

javascript - 考虑夏令时计算两个日期之间的差异

javascript - 减少水平条形图 chartJS 中刻度线之间的空间

javascript - 使用 chart.js 和 bootstrap 调整 y 轴的长度

javascript - 如何使用 Charts.JS 创建显示相对值而不是绝对值的堆积条形图?

javascript - react 组件的导出语法

javascript - 我无法重定向并转到特定部分