如何防止刻度线标签“跳”?用ChartJS BeforeDraw绘制时

编程入门 行业动态 更新时间:2024-10-27 20:25:11
本文介绍了如何防止刻度线标签“跳”?用ChartJS BeforeDraw绘制时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

此问题基于此处找到的上一个问题: ChartJS放置y轴刻度之间的标签。

This question builds on the previous question found here : ChartJS place y-axis labels between ticks.

使用BeforeDraw插件绘制刻度时,每次重新绘制画布时刻度/标签最终都会跳跃。如果您运行代码段并在栏上上下移动时查看y轴标签,您将能够看到此跳跃。

When drawing the ticks with a BeforeDraw plugin, the ticks/labels end up "jumping" every time the canvas is redrawn. If you run the code snippet and look at the y-axis labels as you hover on and off of the bars, you will be able to see this "jumping".

var barChart = new Chart(ctx, { type: 'bar', data: { labels: ['Jan', 'Feb', 'Mar'], datasets: [{ label: 'BAR', data: [10, 20, 30], backgroundColor: 'rgba(0, 119, 204, 0.5)' }] }, options: { responsive: false, scales: { yAxes: [{ ticks: { beginAtZero: true, "userCallback" : function(t, i){ var mapping_function = [ "", "Critical", "Needs Work", "Good", "Needs Work", "Getting There", "Great Choices"]; //return t; return mapping_function[mapping_function.length - (i + 1)]; }, } }] } }, plugins: [{ beforeDraw: function(chart) { var ctx = chart.ctx; var yAxis = chart.scales['y-axis-0']; var tickGap = yAxis.getPixelForTick(1) - yAxis.getPixelForTick(0); yAxis.options.ticks.fontColor = 'transparent'; // hide original tick // loop through ticks array Chart.helpers.each(yAxis.ticks, function(tick, index) { if (index === yAxis.ticks.length - 1) return; var xPos = yAxis.right; var yPos = yAxis.getPixelForTick(index); var xPadding = 10; // draw tick ctx.save(); ctx.textBaseline = 'middle'; ctx.textAlign = 'right'; ctx.fillStyle = 'rgba(0, 0, 0, 0.8)'; ctx.fillText(tick, xPos - xPadding, yPos + tickGap / 2); ctx.restore(); }); } }] });

<script src="cdnjs.cloudflare/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script> <canvas id="ctx" height="200"></canvas>

推荐答案

是!。使用以下插件:

plugins: [{ beforeDraw: function(chart) { // hide original tick chart.scales['y-axis-0'].options.ticks.fontColor = 'transparent'; }, afterDraw: function(chart) { var ctx = chart.ctx; var yAxis = chart.scales['y-axis-0']; var tickGap = yAxis.getPixelForTick(1) - yAxis.getPixelForTick(0); // loop through ticks array Chart.helpers.each(yAxis.ticks, function(tick, index) { if (index === yAxis.ticks.length - 1) return; var xPos = yAxis.right; var yPos = yAxis.getPixelForTick(index); var xPadding = 10; // draw tick ctx.save(); ctx.textBaseline = 'middle'; ctx.textAlign = 'right'; ctx.fillStyle = 'rgba(0, 0, 0, 0.8)'; ctx.fillText(tick, xPos - xPadding, yPos + tickGap / 2); ctx.restore(); }); } }]

演示

var barChart = new Chart(ctx, { type: 'bar', data: { labels: ['Jan', 'Feb', 'Mar'], datasets: [{ label: 'BAR', data: [10, 20, 30], backgroundColor: 'rgba(0, 119, 204, 0.5)' }] }, options: { responsive: false, scales: { yAxes: [{ ticks: { beginAtZero: true, "userCallback": function(t, i) { var mapping_function = ["", "Critical", "Needs Work", "Good", "Needs Work", "Getting There", "Great Choices"]; //return t; return mapping_function[mapping_function.length - (i + 1)]; }, } }] } }, plugins: [{ beforeDraw: function(chart) { // hide original tick chart.scales['y-axis-0'].options.ticks.fontColor = 'transparent'; }, afterDraw: function(chart) { var ctx = chart.ctx; var yAxis = chart.scales['y-axis-0']; var tickGap = yAxis.getPixelForTick(1) - yAxis.getPixelForTick(0); // loop through ticks array Chart.helpers.each(yAxis.ticks, function(tick, index) { if (index === yAxis.ticks.length - 1) return; var xPos = yAxis.right; var yPos = yAxis.getPixelForTick(index); var xPadding = 10; // draw tick ctx.save(); ctx.textBaseline = 'middle'; ctx.textAlign = 'right'; ctx.fillStyle = 'rgba(0, 0, 0, 0.8)'; ctx.fillText(tick, xPos - xPadding, yPos + tickGap / 2); ctx.restore(); }); } }] });

<script src="cdnjs.cloudflare/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script> <canvas id="ctx" height="200"></canvas>

更多推荐

如何防止刻度线标签“跳”?用ChartJS BeforeDraw绘制时

本文发布于:2023-07-18 08:31:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1142865.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:刻度   如何防止   标签   BeforeDraw   ChartJS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!