我在我的项目中使用KonvaJS。我需要用角度渐变制作圆环或圆弧。它在fiddle中完成的方式。我使用了像Konva.Arc
这样的小提琴中使用的颜色
fillRadialGradientStartPoint: 0,
fillRadialGradientStartRadius: 35,
fillRadialGradientEndPoint: 0,
fillRadialGradientEndRadius: 55,
fillRadialGradientColorStops: [0, '#0F0', 1.0, '#0FF', 0, '#F00', 1.0, '#FF0', 0, '#F0F', 1.0, '#00F']
但我不知道自己错过了什么。我不能给它一样的外观。这是plunkr。在plunkr中,我使用了自定义形状。使用自定义形状,我能够绘制角度渐变的环,但我不想使用自定义形状因为如果我使用自定义形状,那么我也必须照顾其他东西,因为Konva已经有两个内置形状Konva.Ring
和Konva.Arc
。所以最好使用它们。
答案 0 :(得分:2)
Konva.Image可以使用html5画布作为其图像源。
这意味着你可以:
以下是示例代码和演示:
var stage = new Konva.Stage({
container: 'container',
width: 350,
height: 350
});
var layer = new Konva.Layer();
stage.add(layer);
// create arc gradient on an in-memory canvas
var r=120;
var lw=30;
var c=drawMultiRadiantCircle(r,lw,['#0F0','#0FF','#F00','#FF0','#F0F']);
// use the in-memory canvas as an image source for Konva.Image
var img=new Konva.Image({x:0,y:0,image:c,width:c.width,height:c.height,draggable:true});
layer.add(img);
layer.draw();
// helper function: return a new canvas containing an arc-gradient
function drawMultiRadiantCircle(r, linewidth, radientColors) {
var xc=r+linewidth/2;
var yc=r+linewidth/2;
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
canvas.width=r*2+linewidth;
canvas.height=r*2+linewidth;
var partLength = (2 * Math.PI) / radientColors.length;
var start = 0;
var gradient = null;
var startColor = null;
var endColor = null;
//
for (var i = 0; i < radientColors.length; i++) {
startColor = radientColors[i];
endColor = radientColors[(i + 1) % radientColors.length];
// x start / end of the next arc to draw
var xStart = xc + Math.cos(start) * r;
var xEnd = xc + Math.cos(start + partLength) * r;
// y start / end of the next arc to draw
var yStart = yc + Math.sin(start) * r;
var yEnd = yc + Math.sin(start + partLength) * r;
gradient = ctx.createLinearGradient(xStart, yStart, xEnd, yEnd);
gradient.addColorStop(0, startColor);
gradient.addColorStop(1.0, endColor);
//
ctx.beginPath();
ctx.strokeStyle = gradient;
ctx.arc(xc, yc, r, start, start + partLength);
ctx.lineWidth = linewidth;
ctx.stroke();
ctx.closePath();
start += partLength;
}
return(canvas);
}
body{padding:20px;}
#container{
border:solid 1px #ccc;
margin-top: 10px;
width:350px;
height:350px;
}
<script src="https://cdn.rawgit.com/konvajs/konva/0.9.0/konva.min.js"></script>
<h4>A draggable Konva.Image created from an html5 canvas.</h4>
<div id="container"></div>