使用 JavaScript 和 HTML5 绘制多个 Canvas 元素
Drawing Multiple Canvas Elements Using JavaScript and HTML5
我想绘制 4 个 canvas 个元素。也就是说,我要绘制同一个canvas元素,4次。
使用一个附加到一个 canvas 元素的 id,我能够获取它并成功绘制它。
来自 main.js
var canvas = document.getElementById('box');
var ctx = canvas.getContext('2d');
var radius = 75;
var endPercent = 99;
var curPercent = 0;
ctx.lineWidth = "10";
ctx.strokeStyle = "green";
function draw(currentPerc){
ctx.clearRect(0,0, canvas.width, canvas.height)
ctx.beginPath();
ctx.arc('100', '100', radius, 0, curPercent*currentPerc, false);
ctx.stroke();
curPercent++
if(curPercent < endPercent){
requestAnimationFrame(function(){
draw(curPercent/100);
});
}
}
draw();
来自HomePage.js
<canvas id="box" width="200" height="200" ></canvas>
在开始弄清楚我将如何绘制这四次时,我尝试了以下方法:
首先在 HomePage.js 中,我添加了 4 个 canvas 元素,其中的 class 名称具有相同的 id 名称。
来自HomePage.js
<canvas class="box" width="200" height="200" ></canvas>
<canvas class="box" width="200" height="200" ></canvas>
<canvas class="box" width="200" height="200" ></canvas>
<canvas class="box" width="200" height="200" ></canvas>
然后在 javascript 我尝试了以下操作:
来自Main.js
var canvasCollect = document.querySelectorAll('canvas.box');
canvasCollect.forEach(draw());
var ctx = canvas.getContext('2d');
var radius = 75;
var endPercent = 99;
var curPercent = 0;
ctx.lineWidth = "10";
ctx.strokeStyle = "green";
function draw(currentPerc){
ctx.clearRect(0,0, canvas.width, canvas.height)
ctx.beginPath();
ctx.arc('100', '100', radius, 0, curPercent*currentPerc, false);
ctx.stroke();
curPercent++
if(curPercent < endPercent){
requestAnimationFrame(function(){
draw(curPercent/100);
});
}
}
这是行不通的。没有渲染。
HTMLCanvasElement 的每个实例都有自己的 2D 渲染上下文。如果我们看一下您的 draw()
函数,我们可以看到以下几行:
ctx.clearRect(0,0, canvas.width, canvas.height)
ctx.beginPath();
ctx.arc('100', '100', radius, 0, curPercent*currentPerc, false);
ctx.stroke();
ctx 是一个变量,指向您的 <canvas>
元素的 CanvasRenderingContext2D,id 为“box”。
事实上,draw() 函数只会绘制到这个 canvas。要使其绘制到 class box
的任何 canvas,您需要解决每个人自己的 2D 渲染上下文。
这是一个例子:
var canvasCollect = document.querySelectorAll('canvas.box');
var radius = 75;
var endPercent = 100;
var curPercent = 0;
function draw() {
var ctx;
canvasCollect.forEach(canvas => {
ctx = canvas.getContext('2d');
ctx.lineWidth = "10";
ctx.strokeStyle = "green";
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.beginPath();
ctx.arc('100', '100', radius, 0, 2 * Math.PI * curPercent / 100, false);
ctx.stroke();
ctx.closePath();
});
curPercent++;
if (curPercent <= endPercent) {
requestAnimationFrame(function() {
draw(curPercent);
});
}
}
draw(curPercent);
<canvas class="box" width="200" height="200"></canvas>
<canvas class="box" width="200" height="200"></canvas>
<canvas class="box" width="200" height="200"></canvas>
<canvas class="box" width="200" height="200"></canvas>
我想绘制 4 个 canvas 个元素。也就是说,我要绘制同一个canvas元素,4次。
使用一个附加到一个 canvas 元素的 id,我能够获取它并成功绘制它。
来自 main.js
var canvas = document.getElementById('box');
var ctx = canvas.getContext('2d');
var radius = 75;
var endPercent = 99;
var curPercent = 0;
ctx.lineWidth = "10";
ctx.strokeStyle = "green";
function draw(currentPerc){
ctx.clearRect(0,0, canvas.width, canvas.height)
ctx.beginPath();
ctx.arc('100', '100', radius, 0, curPercent*currentPerc, false);
ctx.stroke();
curPercent++
if(curPercent < endPercent){
requestAnimationFrame(function(){
draw(curPercent/100);
});
}
}
draw();
来自HomePage.js
<canvas id="box" width="200" height="200" ></canvas>
在开始弄清楚我将如何绘制这四次时,我尝试了以下方法:
首先在 HomePage.js 中,我添加了 4 个 canvas 元素,其中的 class 名称具有相同的 id 名称。
来自HomePage.js
<canvas class="box" width="200" height="200" ></canvas>
<canvas class="box" width="200" height="200" ></canvas>
<canvas class="box" width="200" height="200" ></canvas>
<canvas class="box" width="200" height="200" ></canvas>
然后在 javascript 我尝试了以下操作:
来自Main.js
var canvasCollect = document.querySelectorAll('canvas.box');
canvasCollect.forEach(draw());
var ctx = canvas.getContext('2d');
var radius = 75;
var endPercent = 99;
var curPercent = 0;
ctx.lineWidth = "10";
ctx.strokeStyle = "green";
function draw(currentPerc){
ctx.clearRect(0,0, canvas.width, canvas.height)
ctx.beginPath();
ctx.arc('100', '100', radius, 0, curPercent*currentPerc, false);
ctx.stroke();
curPercent++
if(curPercent < endPercent){
requestAnimationFrame(function(){
draw(curPercent/100);
});
}
}
这是行不通的。没有渲染。
HTMLCanvasElement 的每个实例都有自己的 2D 渲染上下文。如果我们看一下您的 draw()
函数,我们可以看到以下几行:
ctx.clearRect(0,0, canvas.width, canvas.height)
ctx.beginPath();
ctx.arc('100', '100', radius, 0, curPercent*currentPerc, false);
ctx.stroke();
ctx 是一个变量,指向您的 <canvas>
元素的 CanvasRenderingContext2D,id 为“box”。
事实上,draw() 函数只会绘制到这个 canvas。要使其绘制到 class box
的任何 canvas,您需要解决每个人自己的 2D 渲染上下文。
这是一个例子:
var canvasCollect = document.querySelectorAll('canvas.box');
var radius = 75;
var endPercent = 100;
var curPercent = 0;
function draw() {
var ctx;
canvasCollect.forEach(canvas => {
ctx = canvas.getContext('2d');
ctx.lineWidth = "10";
ctx.strokeStyle = "green";
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.beginPath();
ctx.arc('100', '100', radius, 0, 2 * Math.PI * curPercent / 100, false);
ctx.stroke();
ctx.closePath();
});
curPercent++;
if (curPercent <= endPercent) {
requestAnimationFrame(function() {
draw(curPercent);
});
}
}
draw(curPercent);
<canvas class="box" width="200" height="200"></canvas>
<canvas class="box" width="200" height="200"></canvas>
<canvas class="box" width="200" height="200"></canvas>
<canvas class="box" width="200" height="200"></canvas>