Mouse position on canvas painting

匿名 (未验证) 提交于 2019-12-03 08:41:19

问题:

The code below paints correctly but it paints to wrong coordinates. It should paint the place where the mouse is. I was not able to discover my mistake. Thanks.

JSFIDDLE

container.mousedown(function(e) {      var parentOffset = $(this).offset();      var x = e.pageX - parentOffset.left;     var y = e.pageY - parentOffset.top;      context_temp.beginPath();     context_temp.moveTo(x, y);     started = true; });  container.mousemove(function(e) {      var parentOffset = $(this).offset();      var x = e.pageX - parentOffset.left;     var y = e.pageY - parentOffset.top;      if (started) {         context_temp.lineTo(x, y);         context_temp.stroke();     } });  container.mouseup(function(e) {      var parentOffset = $(this).offset();      var x = e.pageX - parentOffset.left;     var y = e.pageY - parentOffset.top;      if (started) {         container.mousemove(x, y);         started = false;         update();     } }); 

回答1:

You're setting your canvas width and height in CSS. That just stretches the canvas the same as it would an image.

The effect is drawing in the wrong place.

Instead you need to set your canvas dimensions on the tag itself:

<canvas width="400" height="400"></canvas> 


回答2:

A <canvas> has its own width and height, which not only define its physical size (unless CSS steps in), but also its logical size (the number of rows/columns of pixels on its drawing surface). When CSS changes the size, the canvas stretches to fit, but doesn't change its logical size. Basically, the pixels stretch too, so the logical and physical coordinates no longer match up.

To fix the problem, you could either do the math to match the coordinates back up, or exclusively use the canvases' own width/height to size them, or set the canvases' width and height properties after the fact to match the width and height set by CSS.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!