Положение мыши не соответствует HTML-холсту - PullRequest
0 голосов
/ 27 мая 2011

Я пытаюсь перетащить некоторые фигуры в холст HTML, но у меня возникла проблема с определением изменения координат мыши [dx, dy]

Прежде всего, нет проблем в самих координатах, хранящихся в mousePos, так как эффекты переноса работают безупречно. Что я делаю, это при первом вводе формы, сохраняя координаты мыши.

pos = {x : mousePos[0] , y : mousePos[1]};

Затем onMotion обновляет координаты при каждом перемещении мыши, а также записывает текущую позицию

dx=mousePos[0]-pos.x;
dy=mousePos[1]-pos.y;
pos = {x : mousePos[0] , y : mousePos[1]};

Затем я добавляю значения dx и dy к координатам фигур (в качестве примера возьмем простой прямоугольник)

ctx.fillRect(0+this.dx,0+this.dy,100+this.dx,100+this.dy);

, пока мышь не движется слишком быстро, она работает относительно хорошо (хотя и не идеально). Если я перемещаю мышь очень быстро, не выходя из окна, прямоугольник не догоняет мышь. Я могу понять, есть ли задержка, чтобы догнать мышь, но как могут быть отключены значения дельты? Ясно, что мы знаем, с чего начали, и даже если в процессе пропускаются десятки / сотни пикселей, в конце концов мышь следует остановить и рассчитать правильные значения дельты.

Любая помощь будет принята с благодарностью, поскольку я наткнулся здесь на концептуальную стену.

1 Ответ

0 голосов
/ 26 июля 2011

Вы можете попытаться получить e.layerX-Y при запуске onMotion, чтобы получить реальную позицию вместо дельты. Таким образом, он не может быть выключен.

Чтобы использовать это, поместите вашу фигуру в div с style = "padding: 0px; margin = 0px;" , потому что позиция относительно родительского блока.

...