javascript - 如何创建 nxm HTML5 canvas 对象网格(彩色方 block )?

标签 javascript css html math canvas

我正在尝试在给定区域中创建正方形网格(矩阵)<canvas>有 n 列和 m 行,如果需要,可以选择设置正方形之间的间距。网格应使用随机颜色填充方 block 。

我还想添加一个缩放功能,这样彩色方 block 在双击的区域会显得更大。

谁能推荐一种生成网格并为方 block 分配随机颜色的好方法?如果您也可以建议如何创建缩放效果,那就太棒了:)

我是 Canvas 的新手,所以任何方法帮助都会很棒! 谢谢

最佳答案

从@Spencer Wieczorek 的评论看来,填充单元格绘制已经完成。

问题另一部分的关键是使用转换:

  • 确定要缩放的起点(双击):var scalePtX,scalePtY

  • 保存未转换的上下文状态:ctx.save();

  • 按 (1-zoom)*scalePoint 翻译:ctx.translate((1-zoom)*scalePtX,(1-zoom)*scalePtY)

  • 按缩放缩放:ctx.scale(zoom,zoom)

  • 使用坐标绘制单元格,就像它们未转换一样:fillRect

  • 将上下文恢复到它未转换的状态:ctx.restore()

这是重要的代码和演示:http://jsfiddle.net/m1erickson/e8bfg3h4/

function draw(){
    ctx.clearRect(0,0,cw,ch);
    ctx.save();
    ctx.translate((1-zoom)*scalePtX,(1-zoom)*scalePtY);
    ctx.scale(zoom,zoom);
    ctx.globalAlpha=0.25;
    for(var y=0;y<rows;y++){
    for(var x=0;x<cols;x++){
        ctx.fillStyle=colors[y*cols+x];
        ctx.fillRect(x*(w+padding),y*(h+padding),w,h);
    }}
    ctx.globalAlpha=1.00;
    ctx.beginPath();
    ctx.arc(scalePtX,scalePtY,10,0,Math.PI*2);
    ctx.closePath();
    ctx.stroke();
    ctx.restore();
}

关于javascript - 如何创建 nxm HTML5 canvas 对象网格(彩色方 block )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25715049/

相关文章:

javascript - return 语句中的 ES6 解构

javascript - 使用 css/javascript 迭代隐藏 html 表的最后一列

css - 分区高度 :100% wrap content

javascript - 如何在同一网页中显示不同的视频弹出窗口?

javascript - 在球体上旋转玩家相机 (javascript/three.js)

javascript - 具有动态 jQuery 选择器的循环事件处理程序

CSS 表格交替行颜色和悬停颜色

html - 如何突出显示基于正则表达式的子字符串并将其转换为 Excel 或 HTML

html - 流出th的div文字

javascript - 内部函数是外部函数的属性吗?