javascript - 如何在调整 Chart.js / canvas 上修复背景渐变
问题描述
我正在使用反应图表 js 来显示折线图。
我的渐变背景在调整窗口大小时被破坏,它变成黑色:
如何通过更改屏幕大小使其工作?
这是创建和生成渐变的函数:
export const getGradientBackground = (canvas) => {
const ctx = canvas.getContext('2d');
const gradient = ctx.createLinearGradient(
canvas.width / 2,
0,
canvas.width / 2,
canvas.height
);
gradient.addColorStop(0.1, 'rgba(0, 145, 148, 0.15)');
gradient.addColorStop(0.2, 'rgba(0, 145, 148, 0.15)');
gradient.addColorStop(0.3, 'rgba(0, 145, 148, 0.15)');
gradient.addColorStop(0.4, 'rgba(255, 255, 255, 0.15)');
gradient.addColorStop(0.5, 'rgba(255, 255, 255, 0.15)');
gradient.addColorStop(0.6, 'rgba(255, 255, 255, 0.15)');
gradient.addColorStop(0.7, 'rgba(255, 255, 255, 0.15)');
gradient.addColorStop(0.8, 'rgba(255, 255, 255, 0.15)');
gradient.addColorStop(0.9, 'rgba(255, 255, 255, 0.15)');
gradient.addColorStop(1.0, 'rgba(255, 255, 255, 0.15)');
ctx.fillStyle = gradient;
ctx.fillRect(10, 10, 200, 100);
return gradient;
};
欢迎任何评论
解决方案
我按照评论中Chris W提供的链接进行了操作,并使用react-chartjs-2
...
<Line
type="line"
data={data}
options={options}
plugins={[
{
beforeDraw: function (chart, args, options) {
const ctx = chart.ctx;
const canvas = chart.canvas;
const chartArea = chart.chartArea;
// Chart background
var gradient = canvas
.getContext("2d")
.createLinearGradient(
canvas.width / 2,
0,
canvas.width / 2,
canvas.height
);
gradient.addColorStop(0.1, "rgba(0, 145, 148, 0.15)");
gradient.addColorStop(0.2, "rgba(0, 145, 148, 0.15)");
gradient.addColorStop(0.3, "rgba(0, 145, 148, 0.15)");
gradient.addColorStop(0.4, "rgba(255, 255, 255, 0.15)");
gradient.addColorStop(0.5, "rgba(255, 255, 255, 0.15)");
gradient.addColorStop(0.6, "rgba(255, 255, 255, 0.15)");
gradient.addColorStop(0.7, "rgba(255, 255, 255, 0.15)");
gradient.addColorStop(0.8, "rgba(255, 255, 255, 0.15)");
gradient.addColorStop(0.9, "rgba(255, 255, 255, 0.15)");
gradient.addColorStop(1.0, "rgba(255, 255, 255, 0.15)");
ctx.fillStyle = gradient;
ctx.fillRect(
chartArea.left,
chartArea.bottom,
chartArea.right - chartArea.left,
chartArea.top - chartArea.bottom
);
}
}
]}
/>
...
正如您在此代码框中看到的那样,当您调整屏幕大小时,背景仍然存在。问题可能是您没有考虑图表尺寸来计算背景矩形尺寸
推荐阅读
- php - fscanf 中的“canf”是什么意思?
- html - Vs Code 没有描述 css 的变化
- javascript - 为什么我在渲染部分得到这个解析错误?
- javascript - 无法使用节点 js 上的异步函数为变量赋值
- reactjs - 如何从我的 React 应用和 JSX 设计生成 PDF
- visual-studio-code - 例如 c++ 文件中数字的 Visual Studio Code 着色
- c - 由于 -allow-shlib-undefined 链接器开关而产生的符号查找错误是否有任何解决方案?
- spring-boot - Spring Cloud Stream 3.0 应用启动多个bean失败
- python - Python:如何杀死无限循环?
- html - 嵌套表中父表的 CSS 样式