【发布时间】:2021-04-17 00:09:21
【问题描述】:
我先给出我的代码:
document.documentElement.style.backgroundImage='url(\'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"><rect width="20" height="20" style="fill-opacity:0;stroke-width:1;stroke:rgb(0,0,255)"/></svg>\')';
var c=document.getElementById("paper").getContext("2d");
c.fillStyle="#000000";
document.documentElement.onmousemove=function(e){
if((e.buttons||e.which)===1){
var x=e.pageX,y=e.pageY;
c.fillRect(x,y,1,1);
}
};
html{width:100vw;height:100vh;overflow:hidden;background-repeat:repeat;cursor:crosshair}
body{margin:0}
#paper{position:absolute;left:0;top:0;width:100vw;height:100vh;z-index:1}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>Graph Paper</title>
</head>
<body>
<canvas id="paper"></canvas>
</body>
</html>
我正在尝试制作一个可以用光标在其上绘制的虚拟方格纸。问题是,如果您运行它并(使用鼠标)绘制一些东西,您会注意到它绘制的位置实际上并不是您所在的位置 - 当您远离 (0,0 )。
我的代码有点简单,所以我不知道它为什么这样做。例如,如果您从中间开始,向 (0,0) 移动,您会看到它从您身后开始,但与您同时到达。如果你从中间开始往右下角走,当你到达时它会比你远远。
我怀疑这与画布位置错误或 e.pageX 和 e.pageY 在某些方面不正确有关。
为什么这个看似简单的代码不起作用?
【问题讨论】:
-
用 css 拉伸画布可能会导致这种情况
-
@ASDFGerte:嗯……在测试时似乎是真的。但是,如何让画布在整个屏幕上伸展呢?
-
您可以通过一些小数学来补偿拉伸,或者根据视口的大小修改画布的
width和height。 PS:用css拉伸画布意味着它会放大你的图像,画布仍然以低分辨率渲染,但生成的图像会被拉伸。 -
@ASDFGerte:所以你建议 JavaScript 应该设置宽度和高度?好的。添加问题的答案,我会接受。感谢您的帮助!
标签: javascript html css canvas mouse-position