Vix*_*inG 4 html javascript jquery canvas
我有困难.createPattern(image,"repeat").
1.我可以填补我自己的模式方通过创建.toDataURL()和.createPattern()?
2.我可以填充一个带有图案的正方形,这是当前的画布吗?
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.strokeRect(0.5, 0.5, 10, 10);
context.arc(5.5, 5.5, 3, 0, Math.PI);
context.rect(3, 3, 1, 1);
context.rect(7, 3, 1, 1);
context.stroke();
var img = new Image();
img.src = canvas.toDataURL();
context.drawImage(img, 10, 10); // works
context.beginPath();
var pattern = context.createPattern(img, "repeat"); // doesn't work
context.fillStyle = pattern;
context.fillRect(20, 20, 100, 100);
context.fill();
context.beginPath();
var pattern2 = context.createPattern(canvas, "repeat"); // doesn't work
context.fillStyle = pattern2;
context.fillRect(120, 20, 100, 100);
context.fill();Run Code Online (Sandbox Code Playgroud)
<canvas id="canvas" width="320" height="240" style="border: solid darkblue 1px;background-color: aliceblue"></canvas>Run Code Online (Sandbox Code Playgroud)
小智 7
您将需要为模式创建单独的画布,因为您无法自引用画布以与模式一起使用.
原因是当您引用要绘制的原始画布时,该模式将具有相同的大小,并且将仅绘制一个实例,因为没有更多空间.
因此,为了使其工作,您需要定义更小尺寸的图案,因此我们需要一个单独的画布或图像,并将其作为模式的源传递.
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
// create the off-screen canvas
var canvasPattern = document.createElement("canvas");
canvasPattern.width = 10;
canvasPattern.height = 10;
var contextPattern = canvasPattern.getContext("2d");
// draw pattern to off-screen context
contextPattern.beginPath();
contextPattern.strokeRect(0.5, 0.5, 10, 10);
contextPattern.arc(5.5, 5.5, 3, 0, Math.PI);
contextPattern.rect(3, 3, 1, 1);
contextPattern.rect(7, 3, 1, 1);
contextPattern.stroke();
// now pattern will work with canvas element
var pattern = context.createPattern(canvasPattern,"repeat");
context.fillStyle = pattern;
context.fillRect(20, 20, 100, 100);
context.fill();Run Code Online (Sandbox Code Playgroud)