HTML5画布 - 不同的笔触

时间:2012-02-28 02:14:22

标签: html5 canvas graph line

我必须绘制一条包含3条不同线条的图形。折线图。

我试过这样做:

function draw() 
{  
    var canvas = document.getElementById("canvas");  
    var ctx = canvas.getContext("2d");      
    ctx.lineWidth=10;

    ctx.strokeStyle="teal";
    ctx.moveTo(10,CompanyA[0]);
    ctx.lineTo(110,CompanyA[1]);
    ctx.lineTo(210,CompanyA[2]);
    ctx.stroke();


    ctx.strokeStyle="green";
    ctx.moveTo(10,CompanyB[0]);
    ctx.lineTo(110,CompanyB[1]);
    ctx.lineTo(210,CompanyB[2]);
    ctx.stroke();       

    ctx.strokeStyle="yellow";
    ctx.moveTo(10,CompanyC[0]);
    ctx.lineTo(110,CompanyC[1]);
    ctx.lineTo(210,CompanyC[2]);
    ctx.stroke();
}

但显然,最后一笔画出所有线条。所以我得到3条黄线,而不是青色,绿色和黄色。 我尝试创建三个不同的Context(ctx1,ctx2和ctx3),但出于某种原因,所有都是用" ctx3.stroke()"呼叫。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:22)

在每一行之前添加ctx.beginPath()来电,并在每ctx.closePath()之后添加ctx.stroke()

如果不这样做,每次调用stroke()方法时,不仅会绘制新线,而且还会再次绘制所有前面的线(使用新的strokeStyle),因为它是相同的仍然打开的线路。

答案 1 :(得分:0)

虽然这里有功能性答案,但我想添加一下。

var ctx1 = canvas.getContext("2d");
var ctx2 = canvas.getContext("2d");
var ctx3 = canvas.getContext("2d");

它们都引用同一个对象。它不会创建新的上下文,它使用已附加到canvas元素的上下文。 Delta完全正确地说它在整个路径上都是黄色的,因为你没有开始新的路径。 ctx.beginPath()将解决您的麻烦。