gpt4 book ai didi

javascript - Fabric.js 组成员的属性不更新?

转载 作者:行者123 更新时间:2023-12-02 17:25:25 41 4
gpt4 key购买 nike

我正在使用 Fabric.js 在 Canvas 上创建对象。我有几个对象一起在一个组中。选择该组后,会触发一个事件,该事件会创建并添加一个以线条末端为中心的圆。当清除选择时,会触发另一个事件,从而删除圆圈。

我不明白的是,当我移动组、取消选择它,然后重新选择它时,为什么圆圈不会将位置更改为线的新端点。

<html>
<head>
<script type="text/javascript" src="path/to/fabric.1.4.5.js"></script>
</head>
<body>
<canvas id="c" width="800" height="600"></canvas>
<script type="text/javascript">
fabric.Object.prototype.originX = fabric.Object.prototype.originY = 'center';
var canvas = new fabric.Canvas('c');
var circle;

var text = new fabric.Text('hello world', {
fontSize: 30,
originX: 'left',
originY: 'top',
left: 25,
top: 30
});

var line = new fabric.Line([10,10, 100,100], {
stroke: 'green',
strokeWidth: 2
});

var group = new fabric.Group([line, text], {
});

group.on('selected', function() {
circle = new fabric.Circle({
strokeWidth: 5,
radius: 28,
fill: 'rgba(200,200,200,0.4)',
stroke: '#666',
left: line.get('x2'),
top: line.get('y2')
})
canvas.add(circle);
});

canvas.add(group);
canvas.renderAll();

canvas.on('selection:cleared', function () {
group._objects.length = 2;
canvas.remove(circle);
});

</script>
</body>
</html>

这是 jsFiddle 上的相同代码:http://jsfiddle.net/Tqmdw/

最佳答案

你的线的位置实际上没有改变。看看小组教程。 http://fabricjs.com/fabric-intro-part-3/#groups 。在组中,项目相对于组中心定位,并且组被作为单个实体处理。这意味着移动组只会更新组的顶部和左侧位置。您可以使用这些新的上/左值并计算线的端点。

group.on('selected', function() {
circle = new fabric.Circle({
strokeWidth: 5,
radius: 28,
fill: 'rgba(200,200,200,0.4)',
stroke: '#666',
left: group.left + line.get('x2'),,
top: group.top + line.get('y2'),
})
canvas.add(circle);
});

我创建了一个更新的 fiddle :http://jsfiddle.net/2e9B9/5/

关于javascript - Fabric.js 组成员的属性不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23548608/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com