You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS Canvas fillStyle异常求助:径向渐变圆形绘制颜色错误如何解决?

问题分析与解决

你遇到的问题核心是Canvas上下文的路径累积机制:每次调用arc()时,都是在已有路径上追加新的圆弧路径,而非创建独立的新路径。这导致后续的fill()操作会填充所有累积的路径区域,再加上渐变设置的作用范围混乱,最终出现渐变失效、图形重叠异常的效果。

修复方案

只需要在每次绘制圆弧前,调用beginPath()重置路径,确保每次绘制的都是独立的圆形路径。同时建议将fillStyle的设置放在路径绘制前,逻辑更清晰:

function draw_grd (x,y,r,c1,c2) {
    var gradient = ctx.createRadialGradient(x, y, 0, x, y, r);
    gradient.addColorStop(0,c1);
    gradient.addColorStop(1,c2);
    
    ctx.beginPath(); // 重置路径,避免累积
    ctx.fillStyle = gradient; // 先设置填充样式
    ctx.arc(x,y,r,0,2*Math.PI);
    ctx.fill();
}

draw_grd(50,50,50,"white","blue");
draw_grd(150,50,50,"green","red");
draw_grd(250,50,50,"black","pink");

关键说明

  • beginPath()会清空当前的路径列表,让后续的绘图指令(比如arc())创建全新的独立路径,这样每次fill()只会填充当前的圆形。
  • 先设置fillStyle再绘制路径是更规范的Canvas绘图流程,避免样式和路径的关联混乱。

内容的提问来源于stack exchange,提问作者Digerkam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:20:40