Ну, одним простым способом было бы скопировать часть холста как imageData и скопировать его в другую часть холста:
function copy(){
var imageData = ctx.getImageData(0,0,150,200);
ctx.putImageData(imageData,250,0);
}
Это снова нарисует все в указанной области вкоординаты, указанные в ctx.putImageData, включая объекты, которые были нарисованы до вызова draw ().Он также игнорирует прозрачность, поэтому копия будет просто заменять уже существующие фоны или аналогичные, а не заменять их.
Другой вариант - визуализировать вещи, которые вы хотите скопировать, на невидимый холст, а затем перетянуть это на основнойcanvas:
var tempCanvas = document.createElement("canvas");
var tempCtx = tempCanvas.getContext("2d");
tempCtx.beginPath();
tempCtx.moveTo(0,0);
tempCtx.lineTo(100,100);
tempCtx.lineTo(150,200);
tempCtx.stroke();
drawTo(0,0);
drawTo(250,0);
function drawTo(x,y){
ctx.drawImage(tempCanvas,x,y);
}
Это также работает с прозрачностью, поэтому копируемый рисунок не обязательно должен быть прямоугольным и его можно копировать, не удаляя части фона.Вы даже можете вставить изображение в разных размерах:
function drawTo(x,y,scale){
ctx.drawImage(tempCanvas,x,y,tempCanvas.width*scale,tempCanvas.height*scale);
}