HTML5 холст - разные штрихи
Я должен нарисовать график с 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 желтые линии вместо бирюзового, зеленого и желтого. Я попытался создать три разных контекста (ctx1, ctx2 и ctx3), но по какой-то причине все они были нарисованы с помощью "ctx3.stroke () " call.
каким будет правильный способ сделать это?
2 ответов
добавить ctx.beginPath()
звонок перед каждой строкой, а также ctx.closePath()
после ctx.stroke()
если вы этого не делаете, каждый раз, когда вы называете stroke()
метод, не только новая линия будет нарисована, но и все предыдущие линии будут нарисованы снова (с новым strokeStyle), так как это тот же путь линии, который все еще открыт.
хотя здесь есть функциональный ответ, я просто хотел бы добавить это.
var ctx1 = canvas.getContext("2d");
var ctx2 = canvas.getContext("2d");
var ctx3 = canvas.getContext("2d");
все они относятся к одному и тому же объекту. Он не создает новый контекст, он использует тот, который уже прикреплен к элементу canvas. Delta совершенно права, говоря, что она окрашивает весь путь желтым, потому что вы не начали новый путь. ctx.beginPath()
решит ваши проблемы.