AngularJS-SVG拖动旋转的元素
AngularJS - SVG drag a rotated Element
我遇到了一个带有自己坐标空间的旋转SVG元素的问题。正常的拖放操作不起作用。例如:元素向右移动而不是向上移动,向左移动而不是向下移动。我正在寻找一个简单的解决方案,对具有不同程度设置的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;
};
}
顺便问一下,"拖放"逻辑应该放在控制器中还是放在指令中?
更新
是的,在转换中有额外的翻译,它是有效的。但在我的项目中,我们有一个稍微复杂一点的场景。
用户可以在运行时插入更多的元素(矩形)。他可以通过点击来选择一个元素,并使用drag&放下或旋转特征。选择的"图元"在一个单独的带有圆的组中可用。
以下是获得更好视图的新代码:http://jsfiddle.net/kjaxdf8c/
我找到了解决方案。这是代码,它起作用:
app.directive('svgInternal', function () {
var telo ='<g ng-mousedown="elementMouseDown($event)" ' +
'ng-attr-transform=" translate({{element.x}},{{element.y}})'+
'rotate({{element.rotation.degree}},'+
'{{element.rotation.x}}, {{element.rotation.y}})">'+
'<rect class="rect" fill="orange" width="100" height="100"'+
' '+
' />'+
'<g class="rect" ng-show="isSelected" ng-attr-transform=" translate({{
-element.x}},{{-element.y}})">'+
'<circle fill="#3EA3DC" stroke-width="2" ng-attr-cx="
{{elementSelections[0].x}}" ng-attr-cy="{{elementSelections[0].y}}"
r="8" />'+
'<circle fill="#3EA3DC" stroke-width="2" ng-attr-cx="
{{elementSelections[1].x}}" ng-attr-cy="{{elementSelections[1].y}}" r="8"
/>'+
'<circle fill="#3EA3DC" stroke-width="2" ng-attr-cx="
{{elementSelections[2].x}}" ng-attr-cy="{{elementSelections[2].y}}" r="8"
/>'+
'<circle fill="#3EA3DC" stroke-width="2" ng-attr-cx="
{{elementSelections[3].x}}" ng-attr-cy="{{elementSelections[3].y}}" r="8"
/>'+
'</g><text x="0" y="15" fill="red">{{element.x}}</text></g>';
return {
templateNamespace: 'svg',
template: telo,
restrict: 'E',
replace: true
};
});
Goran 的问候
相关文章:
- 获取以屏幕像素为单位的旋转SVG元素的边界
- 如何使用javascript设置元素旋转和动态观察的动画
- 使用旋转木马在元素上切换类
- 如何将旋转的画布元素保存到文件中
- 顺时针(仅)围绕元素旋转
- 在 InDesign 中旋转元素的值
- 'toggel'使用css3/jquery来回旋转元素
- 在滚动中旋转元素,哪种方式最轻
- 在保持元素一致性的同时旋转数组元素的最佳方式'id
- 伪元素和旋转列表
- JS with SVG:围绕其中心旋转SVG元素
- 文本旋转器卡在4个元素中的2个上
- 使用jQuery旋转放置在圆上的均匀分布的元素
- 猫头鹰旋转木马2从具有特定内容的元素接收项目索引
- 如何在Javascript中移动元素的旋转点
- 如何在悬停150毫秒的时间内将元素旋转到180度
- 将图像元素旋转+45度
- 如果元素旋转,在FireFox中CSS宽度过渡不稳定
- 如何在jQuery中添加元素旋转
- 元素旋转不顺畅