javascript - 更改对象路径和错误的边界矩形

标签 javascript canvas fabricjs

var canvas = new fabric.Canvas('canvas');
canvas.setWidth(500);
canvas.setHeight(500);
canvas.setBackgroundColor('#ccc');
canvas.allowTouchScrolling = true;

var line = new fabric.Path('M100,350 Q200,100 300,350', {
  fill: '',
  stroke: 'red',
  strokeWidth: 5,
  objectCaching: false
});
var circle = new fabric.Circle({
  radius: 15,
  fill: 'blue',
  lockScalingY: true,
  lockScalingX: true,
  left: 300,
  top: 350
});
canvas.add(line, circle);

canvas.on('object:moving', function(event) {
  var path = canvas.item(0);
  path.path[1][3] = event.target.left;
  path.path[1][4] = event.target.top;
  path.setCoords();
  canvas.calcOffset();
  canvas.renderAll();
});
<script src="//cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.20/fabric.js"></script>
<canvas id="canvas"></canvas>

show demo on fiddle

当我移动圆圈时,线的路径会发生变化。更改线路路径后,我看到错误的边界矩形。 我该如何解决? 我可以删除线并重新创建,但也许有更简单的方法。

最佳答案

您实际上可以重新计算边界框,但您必须自己做。

所以其实比较棘手,需要把当前pathOffset从path中去掉,然后调用内部方法重新计算bbox。

它有效,但作为一种内部方法和不受支持的功能,它可能会在未来发生变化。

var canvas = new fabric.Canvas('canvas');
canvas.setWidth(500);
canvas.setHeight(500);
canvas.setBackgroundColor('#ccc');
canvas.allowTouchScrolling = true;

var line = new fabric.Path('M100,350 Q200,100 300,350', {
  fill: '',
  stroke: 'red',
  strokeWidth: 5,
  objectCaching: false
});
var circle = new fabric.Circle({
  radius: 15,
  fill: 'blue',
  lockScalingY: true,
  lockScalingX: true,
  left: 300,
  top: 350
});
canvas.add(line, circle);

canvas.on('object:moving', function(event) {
  var path = canvas.item(0);
  path.path[1][3] = event.target.left;
  path.path[1][4] = event.target.top;
  path.pathOffset = null;
  path._setPositionDimensions({});
  path.setCoords();
  canvas.calcOffset();
  canvas.renderAll();
});
<script src="//cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.20/fabric.js"></script>
<canvas id="canvas"></canvas>

关于javascript - 更改对象路径和错误的边界矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48574412/

相关文章:

javascript - 如何根据某些特定条件在 div 中动态调整元素大小

javascript - 向简单的 HTML5 游戏添加按钮

javascript - 使用 fabric.js 创建引用线和网格标尺

javascript - 使用 fabric js 时需要更改 Canvas 背景颜色

html - 使用 Fabric.js 启用和禁用 Canvas 的鼠标事件

javascript - 如何反转(转置)HTML 表格的行和列?

javascript - jScrollPane 自动加载更多数据

javascript - 如何让 Dojo 更轻量一点?

javascript - 使用 canvas API 复制 CSS border-radius

javascript - 使用坐标以编程方式旋转形状