将对象添加到旋转的组
Adding objects to a rotated Group
当我将一个对象添加到在 FabricJS 中旋转的组中时,它不考虑其他对象的角度。
重现步骤:
- 选择一个对象
- 点击添加到群组
- 选择组
- 点击旋转群组
- 点击添加到群组
该组现在包含具有不同角度的对象。
var canvas = new fabric.Canvas("canvas", {
width: 400,
height: 400
});
canvas.add(new fabric.Triangle({
top: 100,
left: 100,
width: 50,
height: 50,
fill: '#f55'
}));
$("#rotate").on("click", function() {
var currentObject = canvas.getActiveObject();
var currentAngle = currentObject.angle;
var adjustedAngle = currentAngle + 90;
if (adjustedAngle >= 360) {
adjustedAngle = 0;
}
currentObject.setAngle(adjustedAngle);
canvas.renderAll();
});
$("#add").on('click', function() {
if (canvas.getActiveObject()) {
var activeObject = canvas.getActiveObject();
var object;
console.log(activeObject.type);
if (activeObject.type == "triangle") {
object = fabric.util.object.clone(activeObject);
object.top = activeObject.top;
object.left = activeObject.left + 25;
object.fill = "#0000FF";
var tempAngle = activeObject.angle;
activeObject.angle = 0;
object.angle = 0;
var group = new fabric.Group([activeObject, object], {
angle: tempAngle
});
canvas.add(group);
canvas.setActiveObject(group);
canvas.remove(activeObject);
} else {
var activeGroup = activeObject;
var lastAddedObject = activeGroup.getObjects()[activeGroup.size() - 1];
object = fabric.util.object.clone(lastAddedObject);
object.set('top', lastAddedObject.top + activeGroup.top + activeGroup.height / 2);
object.set('left', lastAddedObject.left + activeGroup.left + activeGroup.width / 2 + 25);
console.log(lastAddedObject.angle);
activeGroup.addWithUpdate(object);
canvas.renderAll();
}
}
});
canvas {
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.0-rc.1/fabric.js"></script>
<button id="rotate">Rotate</button>
<button id="add">Add to Group</button>
<canvas id="canvas" width=400 height=400></canvas>
我链接了将项目添加到旋转组的最新版本。
我真的不明白你想达到什么效果。如果组的角度为 30,则添加角度为 0 的对象时,它将不会旋转。
如果希望对象在旋转组中跳转并作为另一个对象旋转,则必须添加一些计算。在这些计算中,您必须考虑到每次使用 addWithUpdate 时,组都会被销毁并再次创建,并将角度重置为 0。
var canvas = new fabric.Canvas("canvas", {
width: 400,
height: 400
});
canvas.add(new fabric.Triangle({
top: 100,
left: 100,
width: 50,
height: 50,
fill: '#f55'
}));
$("#rotate").on("click", function() {
var currentObject = canvas.getActiveObject();
var currentAngle = currentObject.angle;
var adjustedAngle = currentAngle + 90;
if (adjustedAngle >= 360) {
adjustedAngle = 0;
}
currentObject.setAngle(adjustedAngle);
canvas.renderAll();
});
$("#add").on('click', function() {
if (canvas.getActiveObject()) {
var activeObject = canvas.getActiveObject();
var object;
console.log(activeObject.type);
if (activeObject.type == "triangle") {
object = fabric.util.object.clone(activeObject);
object.top = activeObject.top;
object.left = activeObject.left + 25;
object.fill = "#0000FF";
var tempAngle = activeObject.angle;
activeObject.angle = 0;
object.angle = 0;
var group = new fabric.Group([activeObject, object], {
});
canvas.add(group);
canvas.setActiveObject(group);
canvas.remove(activeObject);
} else {
var activeGroup = activeObject;
var lastAddedObject = activeGroup.getObjects()[activeGroup.size() - 1];
object = fabric.util.object.clone(lastAddedObject);
object.set('top', lastAddedObject.top + activeGroup.top + activeGroup.height / 2);
object.set('left', lastAddedObject.left + activeGroup.left + activeGroup.width / 2 + 25);
//object.set('angle', activeObject.angle);
activeGroup.addWithUpdate(object);
canvas.renderAll();
}
}
});
canvas {
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="http://www.deltalink.it/andreab/fabric/fabric.js"></script>
<button id="rotate">Rotate</button>
<button id="add">Add to Group</button>
<canvas id="canvas" width=400 height=400></canvas>
相关文章:
- 在JS中围绕旋转对象旋转对象
- Threejs-围绕中心旋转对象
- 使用tween.js围绕世界轴旋转对象
- 在HTML5画布中,是否可以围绕旋转对象旋转对象
- 逐渐旋转对象使其面向某个点
- 从对象旋转对象.带有自定义动画功能的trix.setrotationfromleuler
- 如何使用本地坐标旋转对象
- 绕世界轴旋转对象
- 使用捕捉 SVG 将旋转对象限制在边界内
- 旋转对象以匹配轨迹
- Three.js-鼠标移动时沿(0,0,0)旋转对象
- three.js:结合tween.js围绕世界轴旋转对象
- 使用Rapha制作旋转对象的动画;l.js
- 在HTML画布中移动旋转对象
- 在指定的时间内围绕一个圆旋转对象
- Javascript Canvas如何从旋转对象拍摄360*
- CSS3和HTML5 -旋转对象组
- 由多个其他旋转对象组成的旋转对象
- Javascript中的可拖动和可旋转对象(Mootools)
- 点击旋转对象