javascript - JS 在带边距的 Canvas 上绘制时使用错误的坐标

标签 javascript html css html5-canvas

大家好,我在将 Canvas 与一些基本 CSS 样式一起使用时遇到了问题。

所以我想让自己更熟悉 Canvas 元素,所以我按照 Dev Ed (Youtube) 的教程学习如何使用 Canvas 制作绘图应用程序。

我想通过为线条和背景添加一些颜色选项、添加标题等来稍微升级它。我想居中 Canvas 元素并给它固定大小。

现在,当我尝试使用它时,canvas 使用错误的坐标来绘制线条。

提前致谢。

控制鼠标坐标的代码:

function draw(e) {
  if (!painting) return;
  ctx.lineWidth = 10;
  ctx.lineCap = "round";

  ctx.lineTo(e.clientX, e.clientY);
  ctx.stroke();
  ctx.beginPath();
  ctx.moveTo(e.clientX, e.clientY);
}

Codepen 上完整代码的链接:https://codepen.io/Skafec/pen/NWKzxrg

最佳答案

我最近为此创建了几个函数。实际坐标是指针位置的组合,使用边界矩形位置进行转换,并应用一个因子(实际大小与显示大小)

function translatedX(x){
    var rect = canvas.getBoundingClientRect();
    var factor = canvas.width / rect.width;
    return factor * (x - rect.left);
}

function translatedY(y){
    var rect = canvas.getBoundingClientRect();
    var factor = canvas.width / rect.width;
    return factor * (y - rect.top);
}

参见 https://codepen.io/fraigo/pen/jONKWaz

关于javascript - JS 在带边距的 Canvas 上绘制时使用错误的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57910824/

相关文章:

jquery - js/jquery 覆盖流效果

javascript - ES2015 : Named import translation

html - 如何在 HTML 中指定相对定位?

html - 与视差一起使用的下拉导航栏

javascript - 使用 JavaScript 设置 div 的高度和宽度?

jquery - 将 div 扩展到父容器之外,同时将子 div 保留在容器内

javascript - 组合不同的js对象并按键对它们进行排序

javascript - 检查并增加 IndexedDB 的版本号。

javascript - 护照验证

jquery - 如何使用 jquery 在单击时更改表格行的文本