我有一個問題,旋轉SVG元素與自己的座標空間。正常的拖放不起作用。例如:元素向右而不是向上移動,而不是向下移動。我正在尋找一個簡單的解決方案,對具有不同度數設置的SVG元素使用正常的拖放操作。AngularJS - SVG拖動一個旋轉元素
的演示可以在這裏看到http://jsfiddle.net/jmdajkkb/
的HTML瀏覽:
<div ng-app>
<div ng-controller="myController">
<svg style="height: 612px; width: 612px;" ng-mouseup="mouseUp()" ng-mousemove="mouseMove($event)">
<rect fill="orange" width="100" height="100" ng-mousedown="elementMouseDown($event)" ng-attr-x="{{element.x}}" ng-attr-y="{{element.y}}" ng-attr-transform="rotate({{element.rotation.degree}}, {{element.rotation.x}}, {{element.rotation.y}})" />
</svg>
</div>
</div>
的JavaScript:
function myController($scope) {
$scope.element = {
"x": 350,
"y": 50,
"rotation": {
"degree": 60,
"x": 50,
"y": 50
}
};
var isDragging = false, x, y;
$scope.elementMouseDown = function(eventArgs){
isDragging = true;
x = eventArgs.clientX;
y = eventArgs.clientY;
};
$scope.mouseMove = function(eventArgs) {
if(isDragging) {
$scope.element.x += eventArgs.clientX - x;
$scope.element.y += eventArgs.clientY - y;
x = eventArgs.clientX;
y = eventArgs.clientY;
};
};
$scope.mouseUp = function() {
isDragging = false;
};
}
順便說一句,如果 「拖放」 邏輯放在控制器還是在一個指令?
UPDATE
是的,額外的翻譯在變換它的工作原理。但在我的項目中,我們有一個更復雜的場景。
用戶可以在運行時插入更多元素(矩形)。他可以通過點擊選擇一個元素並使用拖動或旋轉特徵。選擇元素可在包含圓圈的單獨組中使用。
Here`s新的代碼,以獲得更好的視野:http://jsfiddle.net/kjaxdf8c/
此致將其不轉動的''元件的容器中,並拖動該代替''元件。 –
我在我的項目中修復X和Y位置的矩形中有不同的子元素。不幸的是,這種解決方法是不可能的。 –
在SVG''元素不允許有孩子,所以我不理解你的評論。 –