私が理解しているように、グラデーションの塗りつぶしは、実際に塗りつぶしている形状に対してではなく、キャンバス要素自体 (つまり 0, 0) に対して指定する必要があります。
質問:この主張は正しいですか? また、それを回避する方法はありますか?
例 (ここでは JSFiddle ):
ctx.beginPath();
ctx.rect(40, 50, 100, 70);
var grd = ctx.createLinearGradient(0, 50, 0, 120);
grd.addColorStop(0, "red");
grd.addColorStop(1, "blue");
ctx.fillStyle = grd;
ctx.fill();
そこで長方形を作ります。シェイプの左上から始まるグラデーションで塗りつぶすには0, 0
、最初の 2 つのパラメーターとして渡すことを期待していました。代わりに、キャンバスに対する長方形の X/Y 座標を渡す必要があるようです。
これは、たとえば、二次曲線で構築された円弧がある場合に問題になります。数学の天才でない限り、曲線の頂点の位置がわからず、制御点しかわからないからです。