javascript - 使用 html5 画布创建大量矩形
问题描述
我正在用javascript创建一个程序,它接受一个数字,将其转换为二进制,然后根据它们对应于二进制数中的一个还是零来填充一系列单元格。我开始创建机制。
要一次填写多个单元格,我正在使用以下代码:
function init() {
canvas = document.getElementById("display");
ctx = canvas.getContext('2d');
draw();
}
function draw() {
for (var x = 0; x += 25; x < 250) {
for (var y = 0; y += 25; y < 250) {
if (y % 2 == 0) {
ctx.fillStyle = "rgb(0, 0, 0)";
} else {
ctx.fillStyle = "rgb(255, 255, 255)";
}
ctx.fillRect(x, y, 25, 25);
}
}
}
window.onload = init;
这似乎是一种非常糟糕的做法。它会导致一些单元格没有被填充,使程序非常慢,并完全停止它。我能想到的唯一选择是数百行ctx.fillRect()
. 有没有更好的方法来填充许多矩形?
解决方案
这是因为您的代码中有一个无限循环。
请记住,for
循环的语法是:
for(variable;condition;variable-change) {
//block of code
}
您切换了condition
andvariable-change
段,使其成为无限,因为x += 25
不是可以评估为true
or的条件false
。相反,这将始终是true
因为您只是为变量分配了一个新值。
推荐阅读
- bash - 我可以在我的 Bash 脚本中获取围绕参数的原始引号字符吗?
- javascript - HTML5 视频时间更新事件在 chrome 中的其他选项卡上没有触发
- jhipster - 如何将aws上的jhipster连接到elk cloud
- dapper - Dapper.Contrib:如何通过过滤除 ID 以外的列来获取一行?
- php - 如何将字符串拆分为关联数组,该数组在数组中包含数组
- c# - 在以下程序中创建 c# 列表有什么区别
- docusignapi - API 调用中的 DocuSign 模拟指示符
- android - 可通过 Kotlin 中的继承进行 Parcelable - 基类属性未得到 parcelized
- google-chrome-extension - Chrome 扩展:如何将“keyup”事件绑定到 manifest.json 文件中的 onCommands API
- sql - 加入多个列 - 使用单个查询