Подтвердить что ты не робот

Функция clearRect не очищает полотно

Я использую этот скрипт для функции onmousemove тела:

function lineDraw() {
    // Get the context and the canvas:
    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");
    // Clear the last canvas
    context.clearRect(0, 0, canvas.width, canvas.height);
    // Draw the line:
    context.moveTo(0, 0);
    context.lineTo(event.clientX, event.clientY);
    context.stroke();
}

Он должен очищать холст каждый раз, когда я перемещаю мышь, и рисую новую линию, но он не работает должным образом. Я пытаюсь решить эту проблему без использования jQuery, слушателей мыши или чего-либо подобного.

Вот демоверсия: https://jsfiddle.net/0y4wf31k/

4b9b3361

Ответ 1

Вы должны использовать " beginPath()". Вот и все.

function lineDraw() {   
    var canvas=document.getElementById("myCanvas");
    var context=canvas.getContext("2d");
    context.clearRect(0, 0, context.width,context.height);
    context.beginPath();//ADD THIS LINE!<<<<<<<<<<<<<
    context.moveTo(0,0);
    context.lineTo(event.clientX,event.clientY);
    context.stroke();
}

Ответ 2

Имейте в виду, что ctx.clearRect() не работает должным образом в Google Chrome. Я провел часы, пытаясь решить проблему, связанную, только чтобы обнаружить, что на Chrome, вместо того, чтобы заполнить прямоугольник с RGBA (0, 0, 0, 0), то на самом деле заполняет прямоугольник с RGBA (0, 0, 0, 1) вместо!

Следовательно, для правильного заполнения прямоугольника необходимыми прозрачными черными пикселями в Chrome необходимо сделать следующее:

ctx.fillStyle = "rgba(0, 0, 0, 0)";
ctx.fillRect(left, top, width, height);

Это, конечно, должно работать во всех браузерах, обеспечивая надлежащую поддержку объекта HTML5 Canvas.

Ответ 3

Просто удалите чертов холст и воссоздайте его.

Ответ 4

Попробуйте с context.canvas.width = context.canvas.width:

function lineDraw() {   
    var canvas=document.getElementById("myCanvas");
    var context=canvas.getContext("2d");
    //context.clearRect(0, 0, context.width,context.height);
    context.canvas.width = context.canvas.width;
    context.moveTo(0,0);
    context.lineTo(event.clientX,event.clientY);
    context.stroke();
}

Демо ЗДЕСЬ