Tôi đã viết một tập lệnh cho phép người dùng vẽ các đường đơn giản trên đầu trang của phần tử canvas 5 HTML5. Mục tiêu cuối cùng là để bản vẽ này được lát gạch và lặp đi lặp lại trong phần còn lại của trình duyệt. Tôi đã nhận được một bức tranh nhân bản vào trang nhưng đang đấu tranh về cách vẽ các đường cùng một lúc trên cùng của nhiều khung vẽ.Làm cách nào để cập nhật phần tử canvas HTML nhân bản với bối cảnh và dữ liệu của canvas gốc?
tôi sẽ dán mã của tôi dưới đây
var size = 40;
var md = false;
var canvas = document.getElementById('canvas');
canvas.addEventListener('mousedown', down);
canvas.addEventListener('mouseup', toggledraw);
canvas.width = 600;
canvas.height = 600;
canvas.addEventListener('mousemove', move);
function move(evt){
var mousePos = getMousePos(canvas, evt);
var posx = mousePos.x;
var posy = mousePos.y;
draw(canvas, posx, posy);
window.posx;
return mousePos;
};
function down(){
md = true;
}
function toggledraw(){
md = false;
}
function getMousePos(canvas, evt){
var rect = canvas.getBoundingClientRect();
return{
x:evt.clientX - rect.left,
y:evt.clientY - rect.top
};
};
function draw(canvas, posx, posy){
var context = canvas.getContext('2d');
if(md){
context.fillRect(posx, posy, size, size)
}
};
cloneCanvas(canvas, window.posx, window.posy, size);
function cloneCanvas(canvas, posx, posy, size,) {
console.log(posx);
var newCanvas = document.createElement('canvas');
var context = newCanvas.getContext('2d');
newCanvas.className = "newNew";
newCanvas.width = canvas.width;
newCanvas.height = canvas.height;
document.body.appendChild(newCanvas);
//context.fillRect(posx, posy, size, size)
context.drawImage(canvas, posx, posy);
return canvas;
}
Có drawImage là con đường để đi, chỉ cần một lưu ý mặc dù, bạn sẽ muốn [xóa nhái của bạn] (https://jsfiddle.net/30efdvz3/4/) trước khi vẽ lại canvas đã cập nhật lên trên nó. – Kaiido
@Kaiido Tôi đã thêm hai dòng để xóa các bản sao trước khi vẽ lại. –