我发现一个相当优雅的解决方案,只需修改保存在数组中的backgroundColor。不幸的是,仅通过render()是不够的,因此我需要进行update()。
顺便说一句,我希望能使用ES6 :-)
var backgroundColor = ['rgb(124, 181, 236)',
'rgb(124, 181, 236)',
'rgb(124, 181, 236)',
'rgb(124, 181, 236)',
'rgb(124, 181, 236)',
'rgb(124, 181, 236)'];
var a = new Chart(document.getElementById("trendChart"), {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: backgroundColor
}]
},
options:{
onClick: function(e){
var element = this.getElementAtEvent(e);
for(var i=0;i<backgroundColor.length;i++){
backgroundColor[i] = 'rgb(124, 181, 236)';
}
backgroundColor[element[0]._index] = 'red';
this.update()
},
scales: {
yAxes: [{
ticks: {
fontColor:'#fff'
}
}],
xAxes: [{
ticks: {
fontColor:'#fff'
}
}],
},
legend:{
display:false
}
}
})
element[0]._chart.config.data.datasets[0].backgroundColor = "rgb(255, 255, 255)";
来更改元素的背景颜色。请注意,这仅适用于您选择第二个之前,但是您应该能够找到如何将颜色重置为原始颜色的方法。我不知道是否以这种方式完成是预期的方式,但这是我通过您的fiddle实现的。 - KRONWALLED