var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
var rw = 50;
var rh = 50;
var x = 10;
var y = 10;
for (x=10, y=10; y<240; x=x+60, y=y+57) {
ctx.fillStyle = "orange";
ctx.fillRect(x,y,rw,rh);
}
for (x=10, y=67; y<240; x=x+60, y=y+57) {
ctx.fillStyle = "orange";
ctx.fillRect(x,y,rw,rh);
}
for (x=10, y=124; y<240; x=x+60, y=y+57) {
ctx.fillStyle = "orange";
ctx.fillRect(x,y,rw,rh);
}
for (x=10, y=181; y<240; x=x+60, y=y+57) {
ctx.fillStyle = "orange";
ctx.fillRect(x,y,rw,rh);
}
for (x=10, y=238; y<240; x=x+60, y=y+57) {
ctx.fillStyle = "orange";
ctx.fillRect(x,y,rw,rh);
}
这是一个javascript代码。在我的HTML中是这个
<canvas id="myCanvas" height="300" width="450" style="border: 1px solid black"></canvas>
我的任务是,将这段代码放在一个循环下面。
非常感谢你的帮助!
答案 0 :(得分:0)
尝试使用此功能的简写。在您的代码中,只有y
部分正在改变其余部分是相同的。因此,您可以创建一个函数并将y
作为参数传递给它。
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
function fillRect(y, rw = 50, rh = 50) {
for(var x = 10; y < 240; x += 60, y += 57) {
ctx.fillStyle = "orange";
ctx.fillRect(x,y,rw,rh);
}
}
for (const y of [10, 67, 124, 181, 238]) {
fillRect(y);
}
&#13;
<canvas id="myCanvas" height="300" width="450" style="border: 1px solid black"></canvas>
&#13;
答案 1 :(得分:0)
据我了解,您可以执行以下操作:
ngx_http_lua_module
的初始值。y
和x
的声明移到for循环中,因为您要在每个for循环中初始化它。如果您将来切换到ES6,这将非常有用。
y
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
var rw = 50;
var rh = 50;
var xFactor = 60;
var yFactor = 57;
var noOfItems = 5;
for (var i = 0; i < noOfItems; i++) {
for (var x = 10, y = 10 + (i * yFactor); y < 240; x += xFactor, y += yFactor) {
ctx.fillStyle = "orange";
ctx.fillRect(x, y, rw, rh);
}
}
答案 2 :(得分:0)
这可以更短。但看起来像嵌套循环需要:
JSON.parse
对于每一行,绘制列 每个列对象,步骤x坐标60,y坐标行* 57;这种方式是你要绘制的每一行,x将在前一列增加,y对于一行将保持相同。
答案 3 :(得分:0)
你可以在循环之外移动ctx.fillStyle
并采用一个嵌套循环,只对每个元素/矩形进行计数,并将该值与绘制位置的因子一起使用。
你想要5行点,从第一行的一个点开始,直到你在最后一行达到5个点。
对于这种方法,你可以采用两个嵌套循环,行/ y值的外部和列/ x值的内部。
为了获得正确的位置,您可以应用因子和给定的偏移量。
var canvas = document.getElementById('myCanvas'),
ctx = canvas.getContext('2d'),
rw = 50,
rh = 50,
x = 10,
y = 10,
i, j;
ctx.fillStyle = "orange";
for (j = 0; j < 5; j++) {
for (i = 0; i <= j; i++) {
ctx.fillRect(x + i * 60, y + j * 57, rw, rh);
}
}
&#13;
<canvas id="myCanvas" height="300" width="450" style="border: 1px solid black"></canvas>
&#13;