createJS beginLinearGradientStroke 如何获得单边渐变效果?

How do I get a one-sided gradient effect for createJS beginLinearGradientStroke?

我正在使用 createJS 为 "loading circle" 制作渐变描边。但是,我只需要在两种颜色中的一种"joining point"上应用渐变效果,而无需在另一个连接点上应用。

我做的是这个,但它只是给我一个正常的渐变效果:

    var rd = 64;      
    timerCount.graphics.setStrokeStyle(8)
    /*                              yellow  ,red*/
      .beginLinearGradientStroke( ["#F7CC00","#FE1D1E"]  ,[0,1]  ,0,rd*0.5  ,0,-rd );

请参考下图:

有人知道我该怎么做吗?

这是我在 JSFiddle 中的代码: https://jsfiddle.net/flamedenise/gg9aabug/18/

谢谢大家,新年快乐!

您要的不是径向渐变,而是圆锥渐变(或 Photoshop 中的角度渐变),Canvas 不直接支持。我快速搜索了角度渐变,发现了一些可能有用的想法:

祝你好运。

我已经设法创建了一个解决方法来实现这个!由于 beginLinearGradientStroke() 只创建一个 "normal" 渐变,我发现用另一个渐变(透明作为第二种颜色)覆盖它会起作用。

我所做的是用显示为 "solid" 的两种颜色创建第一个圆(通过相应地设置比率以及 x 和 y 位置),然后用另一个渐变圆覆盖它 - 一种颜色组合前两种颜色,另一种透明。

这是显示最终结果的 JSFiddle: https://jsfiddle.net/flamedenise/n9no9Lgw/

  var rd = 64;/*radius*/
  var circles = {};
  var ic = [
      /*0*/{ a:"#FEC331" ,b:"#FB1E24"     ,r1:0.5 ,r2:0.5 ,x0:0   ,y0:rd*0.3 ,x1:0  ,y1:-rd},
      /*1*/{ a:"#EA6F2B" ,b:"transparent" ,r1:0   ,r2:1   ,x0:-rd ,y0:0      ,x1:rd ,y1:0  }
  ];

  var circleX = [ 0.5 ,0.75  ];
  var circleY = [ 0.7 ,0.7   ];

  for(var i=0; i<2; i++){  
    circles[l][i] = new createjs.Shape();
    circles[l][i].graphics.setStrokeStyle(8)
      .beginLinearGradientStroke( [ ic[k].a ,ic[k].b ],  [ic[k].r1,  ic[k].r2],  ic[k].x0,ic[k].y0  ,ic[k].x1,ic[k].y1 );

      circles[l][i].rotation = -90;
    circles[l][i].x = ww*circleX[l];      
    circles[l][i].y = wh*circleY[l];

    var arcCommand = circles[l][i].graphics.arc(0, -20, rd, 600 * Math.PI, 0).command;
    if (run == 1) {
      createjs.Tween.get(arcCommand)
        .to({
          endAngle: (360 * Math.PI / 180)
        }, time * 1000);
    }

    circleStage.addChild(circles[l][i]);
  }/*END for loop*/