我已经搜索了其他的问题,但没有一个符合我的情况。
我有一个画布元素:
<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%;
}
当画布的尺寸缩小或放大超过定义值(1053x1000),就会发生调整大小。此时,正确的鼠标位置与函数返回的位置之间会出现间隙。
我还尝试使用以下方法获取位置:
linearSynopticCtrl.getPositionFromEvent = function (event) {
var x = event.x - linearSynopticCtrl.canvas.offsetLeft;
var y = event.y - linearSynopticCtrl.canvas.offsetTop;
return new Point(x,y);
};
但我的结果要差得多。
有人知道如何解决这个问题吗?