Вы можете получить точные координаты мыши, вычитая offsetLeft
и offsetTop
холста из координат X и Y соответственно.С другой стороны, представьте себе, что если в ms paint или photoshop вы рисовали только путем перемещения мыши, и не имело значения, была ли у вас кнопка мыши нажатой, она все равно рисовала бы.Разве это не было бы раздражающим и не интуитивным?Вместо этого вы можете извлекать соответствующие данные из событий мыши и проверять их с интервалом.
К счастью, такого рода вещи достаточно просты для того, чтобы такие библиотеки, как jQuery
и prototype
не былидействительно необходимо, и это можно сделать в «сыром» JavaScript.
Вот мой удар, например:
var mouse = [0,0], mouseDown = false, last = [0,0], fps = 24
ctx = canvas.getContext('2d');
getMouse = function(e){
var X,Y;
X = e.pageX || e.clientX || e.offsetX;
Y = e.pageY || e.clientY || e.offsetY;
X = X - canvas.offsetLeft;
Y = Y - canvas.offsetTop;
mouse = [X,Y];
}
canvas.onmousedown = function(e){
getMouse(e);
mouseDown = true;
last = mouse;
}
canvas.onmouseup = function(){
mouseDown = false;
}
canvas.onmousemove = getMouse;
setInterval(function(){
if(mouseDown){
ctx.beginPath();
ctx.moveTo(last[0],last[1]);
ctx.lineTo(mouse[0],mouse[1]);
ctx.stroke();
ctx.closePath();
last = mouse;
}
},1000/fps);
Вы можете увидеть это в действии здесь .Нажмите и перетащите, чтобы нарисовать.
Надеюсь, это полезно.