javascript - 如何在 Canvas 上绘制多个半透明矩形?

标签 javascript html canvas rect

我在 Canvas 上有一张图片,我想在上面绘制半透明的矩形。我通过用一根手指拖放来逐步绘制它们。

现在我的代码是这样的:

...

function handleTouch(event) {
    if (event.targetTouches.length === 1) {
      touch = event.targetTouches[0];

      if (event.type == 'touchmove') {
        if (drag) {
          rect.w = touch.pageX - rect.startX;
          rect.h = touch.pageY - rect.startY ;
          draw();
        }
      } else {
        rect.startX = touch.pageX;
        rect.startY = touch.pageY;
        drag = true;
      }
    }
}

function handleEnd(event) {
    drag = false;
}

function draw() {
    drawImageOnCanvas();
    ctx.strokeStyle = "green";
    ctx.strokeRect(rect.startX, rect.startY, rect.w, rect.h);
    ctx.fillStyle = 'rgba(0, 100, 255, 0.1)';
    ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);
}

function drawImageOnCanvas() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(imgObj, 0, 0);
}

现在它一次只对一个矩形有效,它看起来像我想要的,但我想要更多。我该怎么办?

最佳答案

难道只保留一个矩形数组然后遍历它们是不可能的,因为您每次都需要重绘它吗?

...
var rects = [];

function handleTouch(event) {
    if (event.targetTouches.length === 1) {
      touch = event.targetTouches[0];

      if (event.type == 'touchmove') {
        if (drag) {
          rects[rects.length-1].w = touch.pageX - rect.startX;
          rects[rects.length-1].h = touch.pageY - rect.startY ;
          draw();
        }
      } else {
        rects.push({
          startX: 0,
          startY: 0,
          w: 0,
          h: 0
        });
        rects[rects.length-1].startX = touch.pageX;
        rects[rects.length-1].startY = touch.pageY;
        drag = true;
      }
    }
}

function handleEnd(event) {
    drag = false;
}

function draw() {
    drawImageOnCanvas();
    for (var i in rects) {
      var rect = rects[i];
      ctx.strokeStyle = "green";
      ctx.strokeRect(rect.startX, rect.startY, rect.w, rect.h);
      ctx.fillStyle = 'rgba(0, 100, 255, 0.1)';
      ctx.fillRect(rect.startX, rect.startY, rect.w, rect.h);
    }
}

function drawImageOnCanvas() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(imgObj, 0, 0);
}

关于javascript - 如何在 Canvas 上绘制多个半透明矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30010479/

相关文章:

javascript - 如何将动态生成的表单中 <select> 的选定选项放入输入字段

javascript - 如何将上传文件的名称设置为输入类型:text on javascript in html

javascript - 使用与按钮 ID 相同的 ID

jquery 简单的幻灯片

html - css 特异性 - 对于更具体的类没有什么

Html Canvas - 翻译、旋转、剪辑 - 使用 context.restore 更快地恢复

javascript - Firefox 中屏幕外 Canvas 的性能问题

javascript - jQuery 定位 this > a,其中 a 不是主题

javascript - 为什么这在 NodeJS 中充当单例

javascript - 网格线切换 HMTL5 Canvas