Я искал другие вопросы, но ни один из них не соответствовал моему делу.Позиция мыши в HTML 5 отзывчивом Холст
У меня есть холст элемент:
<canvas id="linear-synoptic-map" width="1053px" height="1000px" ng-click="linearSynopticCtrl.canvasClicked($event)" ng-mousemove="linearSynopticCtrl.mouseMovedOverCanvas($event)">
</canvas>
И я получаю позицию с помощью этой функции:
linearSynopticCtrl.getPositionFromEvent = function (event) {
var rect = linearSynopticCtrl.canvas.getBoundingClientRect();
var x = event.x - rect.left;
var y = event.y - rect.top;
return new Point(x,y);
};
Проблема заключается в том, что полотно должно быть отзывчивым, поэтому я добавил следующее правило css:
canvas#linear-synoptic-map {
width: 100%;
}
Когда изменение размера происходит (когда размер холста сжимается o ver или увеличено по определению: 1053x1000) пробел начинает показывать между правильной позицией мыши и возвращенной позицией функцией.
Я также попытался получить позицию с таким подходом:
linearSynopticCtrl.getPositionFromEvent = function (event) {
var x = event.x - linearSynopticCtrl.canvas.offsetLeft;
var y = event.y - linearSynopticCtrl.canvas.offsetTop;
return new Point(x,y);
};
Но я получаю гораздо худшие результаты.
Кто-нибудь знает, как исправить эту проблему?
Попробуйте изменить размер фактическую ширину и высоту холста до размеров экрана на окна изменения размера вместо css масштабирования, затем используйте drawImage, чтобы растянуть изображение до размера. Разумеется, вам нужно будет следить за ручным масштабированием и соответствующим образом скорректировать положение мыши. – Frank