我很难描述/呈现问题,因为这部分代码深入我的Angular应用程序内部。
无论如何,我有一个div 350px x 350px,我会用画布覆盖它,并在上面画一条线。
我做了什么?我在表格之前创建了一个canvas标签,并应用了以下CSS规则:
canvas{
position: absolute;
width: 350px;
height: 350px;
border: dotted black 2px; <-- only for visual effect
}
涵盖了div
接下来,我试图画一条简单的线来对其进行测试(我在这里错过了一部分代码,因为它可以工作,所以下载了对canvas的引用):
const ctx = canvasNativeEl.getContext('2d');
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(100, 100);
ctx.stroke();
我希望得到对角线正方形。不幸的是,我得到了矩形的对角线,像这样:
这个问题不允许我画目标线,因为坐标是错误的。
如果您有任何想法,我很乐意看到。 问候!
答案 0 :(得分:1)
如我所解释的in a previous question,问题是在画布上使用width / height属性会产生缩放效果。为了更好地了解您的问题,请在此之前/之后进行:
canvasNativeEl = document.querySelectorAll('canvas');
let ctx = canvasNativeEl[0].getContext('2d');
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(100, 100);
ctx.stroke();
ctx = canvasNativeEl[1].getContext('2d');
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(100, 100);
ctx.stroke();
canvas{
border: dotted black 2px;
}
<canvas></canvas>
<canvas style="width: 350px;height: 350px;"></canvas>
如您所见,第二个画布是第一个画布的缩放版本。就像我们正确地考虑第一条线,然后更改宽度/高度以获得第二条线一样。
为避免这种情况,您应该考虑height / width属性具有正确的坐标并避免缩放效果
canvasNativeEl = document.querySelectorAll('canvas');
let ctx = canvasNativeEl[0].getContext('2d');
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(100, 100);
ctx.stroke();
ctx = canvasNativeEl[1].getContext('2d');
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(100, 100);
ctx.stroke();
canvas{
border: dotted black 2px;
}
<canvas></canvas>
<canvas width='350' height="350" ></canvas>