【发布时间】:2015-04-18 22:10:11
【问题描述】:
我正在开发一个上面有 HTML5 画布的界面,当您选择一个位置时,我需要反转 X 和 Y 坐标。我认为从选定的 X 位置减去画布的宽度,从选定的 Y 位置减去画布的高度会反转坐标,但它会做一些非常奇怪的事情。
点击画布左上角时记录的X和Y坐标是X:324,Y:483,但理论上应该是X:650,Y:587,点击右下角时记录的坐标是@ 987654323@,理论上应该是X:0,Y:0。作为旁注,我确实知道单击时出现的点使用的是倒置坐标,这很好。
感谢任何帮助,特别是如果我做错了什么。谢谢!
JS:
window.fires.directive('fieldDirective', ['ScoutService', '$interval', function(ScoutService, $interval) {
var $scope = this;
$scope.sServ = ScoutService;
$interval(function(){
$scope.col = ScoutService.getAllianceColor();
},1);
return {
restrict: "A",
link: function(scope, element) {
element.bind('mousedown', function(event) {
var canvas = document.getElementById('field');
var context = canvas.getContext('2d');
if(event.offsetX !== undefined) {
$scope.xPos = 650 - event.offsetX;
$scope.yPos = 587 - event.offsetY;
$scope.sServ.sendLobCoords(xPos, yPos);
} else {
$scope.xPos = 650 - event.layerX - event.currentTarget.offsetLeft;
$scope.yPos = 587 - event.layerY - event.currentTarget.offsetTop;
$scope.sServ.sendLobCoords(xPos, yPos);
}
console.log('red'+$scope.xPos + ' ' + $scope.yPos);
canvas.width = canvas.width;
context.arc($scope.xPos, $scope.yPos, 12, 0, Math.PI*2);
context.fillStyle = '#FFFF00';
context.fill();
context.lineWidth = 3;
context.strokeStyle = '#B2B200';
context.stroke();
context.closePath();
});
}
};
}]);
HTML:
<canvas field-directive id="field" ng-class="{'field-red': sCtrl.fieldColor === 'red', 'field-blue': sCtrl.fieldColor === 'blue'}" width="650" height="587">Your browser does not support the HTML5 Canvas Element. Please use a supported browser such as Google Chrome 4.0+ or FireFox 2.0+.</canvas>
【问题讨论】:
标签: javascript angularjs html canvas