【发布时间】:2018-06-07 23:57:00
【问题描述】:
问题是:
我们在 div 内有一个大画布(带有滚动条),带有背景图像,如果我们尝试在其上绘制,坐标就不一样了。
为了显示我们在 mousemove 函数中绘制的问题,位置在 0,0 坐标处是可以的,但是如果我们在图像中继续向右或向下移动,则绘制的圆和鼠标的差异越来越大。
如果鼠标靠近左上角,画圆的地方差别很小,但如果我们靠近右下角,差别是几百像素。
一个 div 内的画布:
<canvas style="width: 1500px; height:800px;" id="myImage" width="1947" height="949"></canvas>
样式是固定大小并获得滚动,宽度和高度是图像的实际大小。
canvas = document.getElementById('myImage');
context = canvas.getContext('2d');
s.addEventListener('mousemove', function(evt) {
var mousePos = getMousePos(canvas, evt);
drawTest(mousePos.x, mousePos.y);
}, false);
function getMousePos(canvas, evt) {
var rect = canvas.getBoundingClientRect();
return {
x: evt.clientX - rect.left,
y: evt.clientY - rect.top
};
}
function drawTest(centerX, centerY) {
//var rect = canvas.getBoundingClientRect();
//centerX = centerX + rect.left;
//centerY = centerY + rect.top;
var radius = 5;
context.beginPath();
context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);
context.fillStyle = 'green';
context.fill();
context.lineWidth = 2;
context.strokeStyle = '#003300';
context.stroke();
}
我们尝试添加和不添加 canvas.getBoundingClientRect 坐标,但没有结果。
问题
我们如何解决它并在鼠标所在的精确坐标中绘制?
【问题讨论】:
-
在您的问题中包含MCVE 所需的所有内容。
getMousePos看起来对于找出问题所在至关重要。 -
从画布中移除样式属性,使用其
width和height属性来调整画布大小。 -
无法删除样式属性,用于响应式网络等...“设计师要求”,但通过 Solver 的重新调整答案解决了问题。
标签: javascript html canvas