我用Chart.js创建了一个带有多条线的折线图(默认为1像素粗),我想要用户能够将鼠标放在任何一条特定的线上(而不仅仅是点),并且使该线变粗(例如3像素)。在Chart.js中是否可以实现这个功能?
我用Chart.js创建了一个带有多条线的折线图(默认为1像素粗),我想要用户能够将鼠标放在任何一条特定的线上(而不仅仅是点),并且使该线变粗(例如3像素)。在Chart.js中是否可以实现这个功能?
这个想法是找到与您想要更改的图表线对应的数据集对象,更新其borderWidth
属性,然后调用chart.update()
。
以下是一个例子,请注意onHover
函数。
注:此处的“图表线”指的是图表中的线条或边框。
var config = {
type: 'line',
options: {
tooltips: {
mode: 'nearest',
intersect: false,
},
hover: {
mode: 'nearest',
intersect: false
},
// LOOK AT ME!!! I'M SO IMPORTANT!!!
onHover: function onHover (evt, activeElements) {
if (!activeElements || !activeElements.length) return;
var datasetIndex = activeElements[0]._datasetIndex;
var activeDataset = this.data.datasets[datasetIndex];
activeDataset.borderWidth = 5;
this.update();
},
},
data: {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [{
label: 'BlueLine',
fill: false,
backgroundColor: window.chartColors.blue,
borderColor: window.chartColors.blue,
data: [57, 66, 17, 23, 16, 38, 60, 25, 5],
}, {
label: 'RedLine',
fill: false,
backgroundColor: window.chartColors.red,
borderColor: window.chartColors.red,
data: [23, 6, 32, 57, 38, 17, 19, 7, 23],
}]
},
};
var ctx = document.getElementById('canvas').getContext('2d');
window.myLine = new Chart(ctx, config);
tooltip/hover: { mode: 'nearest', intersect: false }
也很重要。在 chartjs 中,线条是无法悬停的,这个 hack 让你可以悬停激活最近的数据点,从而获得类似于在线上悬停的效果。确保你已经正确理解了这一部分。我的示例是可运行的,请运行它以查看效果。你应该会看到 activeElements[0]
发生了变化。 - hackape