用不同的颜色填充 canvas 路径的一部分
Fill a portion of canvas path with different color
我已经在 canvas 中创建了一条绿色路径,如下所示:
(来源:shrani.si)
我不得不使用 4 个 lineTo() 和 4 个 quadraticCurveTo() 函数。我想构建某种进度条,看起来像这样:
(来源:shrani.si)
在 canvas 中是否有任何简单的解决方案?我的目标是拥有一个 JavaScript 函数,可以根据进度百分比更新 canvas 形状。我知道我可以在绿色形状之后再制作一个蓝色形状,但我该如何计算它的适当长度呢?非常感谢任何帮助:)
您的圆角矩形由 9 个子路径组成:
- 上边框的右半部分,
- 右上角,
- 右边框,
- 右下角,
- 下边框,
- 左下角,
- 左边框,
- 右上角,
- 上边框的左半部分。
令 w 为矩形的宽度,h 为矩形的高度,r 为边框半径.
路径总长度约为*:
长度=(w - 2r)*2 + (h -2r)*2 + 2πr
将这个长度乘以一个百分比得到一个子长度,这是给出蓝色路径的长度。每个矩形的子路径的长度如下:
- 1, 9: (w-2r)/2
- 2, 4, 6, 8: πr/2
- 3, 7: (h-2r)
- 5: (w-2r)
现在,使用子长度,按照上面给出的顺序遍历每个子路径。对于每个子路径:
- 如果子长度大于或等于子路径的长度,绘制整个子路径,并减少
子路径长度的子长度。
- 否则,根据长度绘制部分子路径。这将涉及计算部分直线或部分弧,与计算更复杂的路径相比,这相对容易。然后停止绘制。
* 我说 "about" 因为您使用二次曲线来近似拐角处的圆弧。顺便说一下,您可以使用 arc
方法代替这些角。
我已经在 canvas 中创建了一条绿色路径,如下所示:
(来源:shrani.si)
我不得不使用 4 个 lineTo() 和 4 个 quadraticCurveTo() 函数。我想构建某种进度条,看起来像这样:
(来源:shrani.si)
在 canvas 中是否有任何简单的解决方案?我的目标是拥有一个 JavaScript 函数,可以根据进度百分比更新 canvas 形状。我知道我可以在绿色形状之后再制作一个蓝色形状,但我该如何计算它的适当长度呢?非常感谢任何帮助:)
您的圆角矩形由 9 个子路径组成:
- 上边框的右半部分,
- 右上角,
- 右边框,
- 右下角,
- 下边框,
- 左下角,
- 左边框,
- 右上角,
- 上边框的左半部分。
令 w 为矩形的宽度,h 为矩形的高度,r 为边框半径.
路径总长度约为*:
长度=(w - 2r)*2 + (h -2r)*2 + 2πr
将这个长度乘以一个百分比得到一个子长度,这是给出蓝色路径的长度。每个矩形的子路径的长度如下:
- 1, 9: (w-2r)/2
- 2, 4, 6, 8: πr/2
- 3, 7: (h-2r)
- 5: (w-2r)
现在,使用子长度,按照上面给出的顺序遍历每个子路径。对于每个子路径:
- 如果子长度大于或等于子路径的长度,绘制整个子路径,并减少 子路径长度的子长度。
- 否则,根据长度绘制部分子路径。这将涉及计算部分直线或部分弧,与计算更复杂的路径相比,这相对容易。然后停止绘制。
* 我说 "about" 因为您使用二次曲线来近似拐角处的圆弧。顺便说一下,您可以使用 arc
方法代替这些角。