使用 javascript,我在 canvas 元素上绘制了一条“弯曲”路径,该路径由许多小的直线段组成:Harmonograph。
现在我希望每个部分都有不同的颜色,沿着路径应用彩虹色。所以路径从红色开始,然后逐渐变为黄色,然后变为绿色,等等。
我想使用beginPath()
and closePath()
only 一次来加快速度。这是否可以使用类似功能createLinearGradient();
或任何其他标准功能,只要它很快,因为整个路径需要每秒重绘多次。
使用 javascript,我在 canvas 元素上绘制了一条“弯曲”路径,该路径由许多小的直线段组成:Harmonograph。
现在我希望每个部分都有不同的颜色,沿着路径应用彩虹色。所以路径从红色开始,然后逐渐变为黄色,然后变为绿色,等等。
我想使用beginPath()
and closePath()
only 一次来加快速度。这是否可以使用类似功能createLinearGradient();
或任何其他标准功能,只要它很快,因为整个路径需要每秒重绘多次。
除了分隔路径之外,没有其他方法可以做到这一点。这是我为您的 lissajous 人物实现的彩虹渐变。你可以在这里看到一个演示:
drawLissajous: function(points) {
if (points.length > 2) {
var x, y, x = points[1][0] + this.centerX;
y = points[1][1] + this.centerY;
ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
ctx.moveTo(x, y);
for (var count = 2; count < points.length; count++) {
ctx.beginPath();
ctx.moveTo(x, y);
var newX = points[count][0] + this.centerX,
newY = points[count][1] + this.centerY,
f = 0.005,
blue = Math.sin(f * count + 0) * 127 + 128,
red = Math.sin(f * count + 2) * 127 + 128,
green = Math.sin(f * count + 4) * 127 + 128;
ctx.strokeStyle = 'rgb(' + Math.round(red) + ', ' + Math.round(green) + ', ' + Math.round(blue) + ')';
x = newX;
y = newY;
ctx.lineTo(x, y);
ctx.stroke();
ctx.closePath();
}
ctx.stroke();
ctx.closePath();
}
}
我有同样的问题,我做了一个简单的测试,它只是使用正常的渐变,希望它有用
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
context.beginPath();
context.moveTo(100, 20);
// line 1
context.lineTo(200, 160);
// quadratic curve
context.quadraticCurveTo(230, 200, 250, 120);
// bezier curve
context.bezierCurveTo(290, -40, 300, 200, 400, 150);
// line 2
context.lineTo(500, 90);
// create radial gradient
var grd = context.createRadialGradient(238, 50, 10, 238, 50, 300);
// light blue
grd.addColorStop(0, '#8ED6FF');
// dark blue
grd.addColorStop(1, '#004CB3');
context.lineWidth = 5;
context.strokeStyle = grd;
context.stroke();