Rya*_*n M 6 javascript chart.js
当我将鼠标悬停在chartjs v2中的绘图区域时,我试图渲染一条垂直线.我有一个基本的工作版本,但我没有想出如何在每次绘制线条时删除线条(旧线条只是粘在一起).
这是一个工作示例 - https://jsfiddle.net/s9gyynxp/5/
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3]
}]
}
});
// Hook into main event handler
var parentEventHandler = Chart.Controller.prototype.eventHandler;
Chart.Controller.prototype.eventHandler = function() {
var ret = parentEventHandler.apply(this, arguments);
// Draw the vertical line here
var eventPosition = Chart.helpers.getRelativePosition(arguments[0], this.chart);
this.chart.ctx.beginPath();
this.chart.ctx.moveTo(eventPosition.x, 30);
this.chart.ctx.strokeStyle = "#ff0000";
this.chart.ctx.lineTo(eventPosition.x, 340);
this.chart.ctx.stroke();
return ret;
};
Run Code Online (Sandbox Code Playgroud)
注意我已经看到了其他解决方案,其中第二个画布层用在图表画布的顶部 - 我不认为这是一个选项,因为我需要垂直线出现在图表的顶部,但在下面自定义工具提示我将实施.
任何建议表示赞赏,谢谢!
只需在绘制线条之前添加以下行
...
this.clear();
this.draw();
...
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你的线不会一直延伸到底部.如果你想让它一直延伸使用0,this.chart.height你的yStart和yEnd.或者您可以使用y轴刻度来计算刻度的最大和最小像素(请参阅https://jsfiddle.net/ombaww9t/).
小提琴 - https://jsfiddle.net/56s9av1j/
2.6.0 的工作版本(将 'y-axis-0' 更改为您 y 轴的 id)
// Hook into main event handler
let parentEventHandler = Chart.Controller.prototype.eventHandler;
Chart.Controller.prototype.eventHandler = function () {
let ret = parentEventHandler.apply(this, arguments);
let x = arguments[0].x;
let y = arguments[0].y;
this.clear();
this.draw();
let yScale = this.scales['y-axis-0'];
this.chart.ctx.beginPath();
this.chart.ctx.moveTo(x, yScale.getPixelForValue(yScale.max));
this.chart.ctx.strokeStyle = "#ff0000";
this.chart.ctx.lineTo(x, yScale.getPixelForValue(yScale.min));
this.chart.ctx.stroke();
return ret;
};
Run Code Online (Sandbox Code Playgroud)