javascript - 如何防止路径再次被填满?

标签 javascript html html5-canvas

我正在 Canvas 元素上绘制一些形状。第一个元素是路径,根本不应该被填充。我知道我可以将 fillStyle 设置为 none,但它会被填充两次。
这是一些示例代码(也在 jsfiddle 上):

can = document.getElementById('can');
ctx = can.getContext('2d');

function drawPoint(x,y){
    ctx.arc(x,y,12,0,Math.PI*2,false);
    ctx.fillStyle ='rgba(255, 0, 0, 0.2)';
    ctx.fill();
}

function shape(){
    ctx.fillStyle = 'rgba(0,255,0,0.2)';
    ctx.beginPath();
    ctx.moveTo(10,10);
    ctx.lineTo(100,30);
    ctx.lineTo(30,200)
    ctx.closePath();
    ctx.stroke();
    ctx.fill();
}

shape();

drawPoint(30,12);

这只是一个示例代码,用于说明我面临的问题。 当我之后绘制形状时,该点位于背景中。所以这行不通。我还搜索了有关填充方法如何工作的资源,但找不到任何有用的内容。

那么如何绘制形状而不填充它呢?

最佳答案

只是不要调用fill()...

例如,如果您希望您的方法可重用,您可以使用标志:

function shape(fill){
    fill = fill || false;
    ctx.fillStyle = 'rgba(0,255,0,0.2)';
    ctx.beginPath();
    ctx.moveTo(10,10);
    ctx.lineTo(100,30);
    ctx.lineTo(30,200)
    ctx.closePath();
    ctx.stroke();
    if (fill) ctx.fill();
}

现在您可以调用:

draw();     /// won't fill
draw(true); /// fills

还要向此方法添加一个 beginPath() ,否则它将仅添加到第一个形状的路径(这可能就是您的意思?):

function drawPoint(x,y){
    ctx.beginPath();
    ctx.arc(x,y,12,0,Math.PI*2,false);
    ctx.fillStyle ='rgba(255, 0, 0, 0.2)';
    ctx.fill();
}

希望这有帮助(并且我没有误解你的问题)!

<强> Modified fiddle here

关于javascript - 如何防止路径再次被填满?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21327837/

相关文章:

javascript - 具有单独操作值的 Ajax 表单

javascript - 为什么点击 div 元素没有任何反应?

html - 使用 float 项的 CSS 网格

javascript - 以非线性/矩形方式裁剪网页上的图像,以便任何形式的多边形

html - chrome 中的 EaselJs 错误

javascript - 有没有办法在 Canvas 中绘制损坏的图像?

javascript - 所有复选框均显示为已选中。 VueJs VueMaterial

javascript - 将文件中的另一个对象添加到 Javascript 对象数组

javascript - 哪些网站正在使用我的 GitHub 托管脚本?

php - 使带有动态背景图片url的div成为一个链接