多个 canvas,可重复使用的渐变
Multiple canvas, reusable gradients
我正在尝试为多个 canvas 编写干代码。我正在将渐变应用于 chartjs 图表,不想为每个图表实例重写相同的渐变。
var ctx1 = $("#SoftwareChart").get(0).getContext("2d");
var ctx2 = $("#WebChart").get(0).getContext("2d");
var gradient1 = ctx1.createLinearGradient(0, 0, 0, 400);
gradient1.addColorStop(0, '#ff9170');
gradient1.addColorStop(1, '#ff3f05');
var gradient2 = ctx1.createLinearGradient(0, 0, 0, 400);
gradient3.addColorStop(0, '#f5d147');
gradient3.addColorStop(1, '#dfb30c');
var gradient1 = ctx2.createLinearGradient(0, 0, 0, 400);
gradient1.addColorStop(0, '#ff9170');
gradient1.addColorStop(1, '#ff3f05');
var gradient2 = ctx2.createLinearGradient(0, 0, 0, 400);
gradient3.addColorStop(0, '#f5d147');
gradient3.addColorStop(1, '#dfb30c');
如你所见,这不是很干,我讨厌它。有没有办法在我想使用的所有 canvas 上使用 .getContext 并将渐变一次应用于所有这些?
上次我使用 chart.js,我有 17 个不同的图表要创建。
只要您可以轻松获取所有 canvas
标签,就可以将它们全部添加到对象数组中,如下所示:
//Get array of all canvases on the DOM
var chartCount = $('canvas').length;
for (var i = 1; i < chartCount; i++) {
//Get DOM element of canvas
var el = $('chart').get(i);
//Add new entry to canvas array with DOM element and canvas context
canvas[i] = {
'DOM_Element': el,
'context': el.getContext('2d')
};
}
然后每个 canvas 上下文都可以用 canvas[x]['context']
.
之类的东西引用
然后您可以编写一个函数来遍历 canvas 数组中的所有元素,并根据需要添加渐变。
我正在尝试为多个 canvas 编写干代码。我正在将渐变应用于 chartjs 图表,不想为每个图表实例重写相同的渐变。
var ctx1 = $("#SoftwareChart").get(0).getContext("2d");
var ctx2 = $("#WebChart").get(0).getContext("2d");
var gradient1 = ctx1.createLinearGradient(0, 0, 0, 400);
gradient1.addColorStop(0, '#ff9170');
gradient1.addColorStop(1, '#ff3f05');
var gradient2 = ctx1.createLinearGradient(0, 0, 0, 400);
gradient3.addColorStop(0, '#f5d147');
gradient3.addColorStop(1, '#dfb30c');
var gradient1 = ctx2.createLinearGradient(0, 0, 0, 400);
gradient1.addColorStop(0, '#ff9170');
gradient1.addColorStop(1, '#ff3f05');
var gradient2 = ctx2.createLinearGradient(0, 0, 0, 400);
gradient3.addColorStop(0, '#f5d147');
gradient3.addColorStop(1, '#dfb30c');
如你所见,这不是很干,我讨厌它。有没有办法在我想使用的所有 canvas 上使用 .getContext 并将渐变一次应用于所有这些?
上次我使用 chart.js,我有 17 个不同的图表要创建。
只要您可以轻松获取所有 canvas
标签,就可以将它们全部添加到对象数组中,如下所示:
//Get array of all canvases on the DOM
var chartCount = $('canvas').length;
for (var i = 1; i < chartCount; i++) {
//Get DOM element of canvas
var el = $('chart').get(i);
//Add new entry to canvas array with DOM element and canvas context
canvas[i] = {
'DOM_Element': el,
'context': el.getContext('2d')
};
}
然后每个 canvas 上下文都可以用 canvas[x]['context']
.
然后您可以编写一个函数来遍历 canvas 数组中的所有元素,并根据需要添加渐变。