Я пытаюсь получить холст HTML 5 для работы моего приложения в качестве доски для рисования. Проблема, с которой я столкнулся:
Рисование происходит с некоторым смещением относительно указателя мыши. Я использую метод JQuery .offset
для вычисления смещения события на холсте. Еще одна странная вещь, которую я заметил, это то, что хотя ширина тега холста составляет 150 пикселей, линия, проведенная от (0,10) до (150,10), достигает середины области холста и даже линии как big as (0,10) - (250,10) также отображается. Разве «пиксели» не вычисляются из карты объекта события непосредственно в «координатах точки» тега Canvas? Что еще здесь может быть не так? Образец кода:
if (event.pageX || event.pageY)
{
event._x = event.pageX;
event._y = event.pageY;
}
else if (event.clientX || event.clientY)
{
event._x = event.clientX + document.body.scrollLeft
+ document.documentElement.scrollLeft;
event._y = event.clientY + document.body.scrollTop
+ document.documentElement.scrollTop;
}
var canvasElem = $('#' + canvasId);
canvasOffset = canvasElem.offset();
event._x -= Math.floor(canvasOffset.left);
event._y -= Math.floor(canvasOffset.top);
////////////// CODE STRIPPED //////////////////////////////
this.mousedown = function (ev) {
context.beginPath();
context.moveTo(ev._x, ev._y);
tool.started = true;
};
// This function is called every time you move the mouse. Obviously, it only
// draws if the tool.started state is set to true (when you are holding down
// the mouse button).
this.mousemove = function (ev) {
if (tool.started) {
context.lineTo(ev._x, ev._y);
context.stroke();
}
};
// This is called when you release the mouse button.
this.mouseup = function (ev) {
if (tool.started) {
tool.mousemove(ev);
tool.started = false;
}
}
Решено
Нашел проблему:
Я использовал строку, чтобы установить высоту и ширину холста. Что-то вроде: canvas.height = "200px";
Но лучше мы всегда должны использовать числа, чтобы установить высоту / ширину для холста, например. canvas.height = 200;
Это решает проблему.