javascript - Circle(ARC) 渐变填充 Canvas JS

标签 javascript html canvas gradient geometry

我需要绘制动态圆环图 - 类似于 -

http://194.90.28.56/~dev1/t.jpg

绿色部分表示百分比(在本例中为 27%)- 它必须是动态的。

我想我需要做一些类似 - Android - How to draw an arc based gradient 的事情

但是用 JS..

谢谢。

最佳答案

好问题。 Canvas 中沿路径的渐变很难。最简单的方法是捏造它。

与其将您的图像视为沿圆形路径的渐变,不如将其视为两个线性渐变。

  • 一个在左侧,从绿色到灰色,从上到下。
  • 另一个在右侧,从白色到灰色,从上到下。

想象一下由这两个渐变组成的正方形:

enter image description here

现在想象一个圆圈穿过:

enter image description here

这就是您要做的全部。

要像这样“剪切”最简单的方法是使用剪切区域,所以我做了一个这样做的例子。

这是实际示例:http://jsfiddle.net/simonsarris/Msdkv/

下面的代码!希望对您有所帮助。

var greenPart = ctx.createLinearGradient(0,0,0,100);
greenPart.addColorStop(0, 'palegreen');
greenPart.addColorStop(1, 'lightgray');

var whitePart = ctx.createLinearGradient(0,0,0,100);
whitePart.addColorStop(0, 'white');
whitePart.addColorStop(1, 'lightgray');


var width = 20;
ctx.lineWidth = width;

// First we make a clipping region for the left half
ctx.save();
ctx.beginPath();
ctx.rect(-width, -width, 50+width, 100 + width*2);
ctx.clip();

// Then we draw the left half
ctx.strokeStyle = greenPart;
ctx.beginPath();
ctx.arc(50,50,50,0,Math.PI*2, false);
ctx.stroke();

ctx.restore(); // restore clipping region to default

// Then we make a clipping region for the right half
ctx.save();
ctx.beginPath();
ctx.rect(50, -width, 50+width, 100 + width*2);
ctx.clip();

// Then we draw the right half
ctx.strokeStyle = whitePart;
ctx.beginPath();
ctx.arc(50,50,50,0,Math.PI*2, false);
ctx.stroke();

ctx.restore(); // restore clipping region to default

关于javascript - Circle(ARC) 渐变填充 Canvas JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16046962/

相关文章:

javascript - 如何使用 :after pseudoclass and jquery? 为悬停按钮设置动画

php - 将 PHP 数组解析为 JavaScript 数组

javascript - 无法使用 JavaScript 将字符串内容附加到 html 表格单元格

javascript数组for循环一次又一次地显示数组中的最后一项

Android canvas drawText 文本的y位置

JavaScript 价格计算器脚本与此类似

javascript - AngularJS 未更新,指令中的指令

canvas - 如何使用 Webdriver 或 Protractor 在 Canvas 中获取文本

javascript - 如何使用 anchor 标记在单击按钮时弹出?

javascript - 在将 Canvas 保存为图像之前如何知道渲染是否完成?