【问题标题】:Fabric JS object alignment not working as expectedFabric JS对象对齐未按预期工作
【发布时间】:2017-10-01 06:58:16
【问题描述】:

我试图对齐组内的一个对象。当我将第一个对象向左、居中或向右对齐时,它是成功的,然后我尝试了第二个对象,第一个对象自行移动!

请看下图(GIF): Fabric JS Object Alignment

我使用 HTML5 Canvas、fabric JS 和 jQuery 进行开发。

这里是小提琴:https://jsfiddle.net/mt0ccqq2/

代码如下:

$(document).ready(function() {

  var canvas    = new fabric.Canvas("canvas", { preserveObjectStacking: true });

  // create rectangle
  var rect = new fabric.Rect({
    left: 50,
    top: 50,
    width: 300,
    height: 100,
    fill: '#ff0000'
  });

  // create circle
  var text = new fabric.Text("Align Me next", {
    left: 190,
    top: 320,
    fontSize: 20
  });

  // create text
  var text2 = new fabric.Text("Align me first", {
    left: 100,
    top: 200,
    fontSize: 20
  });

  canvas.add(rect, text, text2);
  canvas.renderAll();

// GROUP ON SELECTION
canvas.on("selection:created", function(e) {
    var activeObj = canvas.getActiveGroup();
  if(activeObj.type === "group") {
    console.log("Group created");

var groupWidth = e.target.getWidth();
var groupHeight = e.target.getHeight();


e.target.forEachObject(function(obj) {
    var itemWidth = obj.getBoundingRect().width;
  var itemHeight = obj.getBoundingRect().height;

  // ================================
        // OBJECT ALIGNMENT: " H-LEFT "
        // ================================
  $('#objAlignLeft').click(function() {
      obj.set({
        left: -(groupWidth / 2),
        originX: 'left'
      });
    obj.setCoords();
    canvas.renderAll();
  });
  // ================================
        // OBJECT ALIGNMENT: " H-CENTER "
        // ================================
  $('#objAlignCenter').click(function() {
      obj.set({
        left: (0 - itemWidth/2),
        originX: 'left'
      });
    obj.setCoords();
    canvas.renderAll();
  });
  // ================================
        // OBJECT ALIGNMENT: " H-RIGHT "
        // ================================
  $('#objAlignRight').click(function() {
      obj.set({
        left: (groupWidth/2 - itemWidth/2),
        originX: 'center'
      });
    obj.setCoords();
    canvas.renderAll();
  });

});

 }
}); // END OF " SELECTION:CREATED "

});

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 它没有移动我试过了,我对齐下一个文本向前移动第一个文本没有移动检查这里jsfiddle.net/Venkatachalam_Perisetla/mt0ccqq2/1
  • 当您尝试第二次对齐时,它仍在移动另一个对象。
  • 你可以检查我的 jsfiddle 链接,否则请解释一下你的确切要求。
  • 是的,我已经检查了你的 jsfiddle,但我的小提琴还是一样。请在i.stack.imgur.com/p2Jjl.gif 此处查看屏幕截图 (GIF) 以了解问题..

标签: html canvas fabricjs


【解决方案1】:

我想这就是你要找的,对吧?

这是对您的代码的调整...

canvas.on("selection:cleared", function(e) {
  $('#objAlignLeft').off('click');
  $('#objAlignCenter').off('click');
  $('#objAlignRight').off('click');
});

这是最重要的 JSFiddle,https://jsfiddle.net/rekrah/xxrqbhph/

如果您还有其他问题,请告诉我。乐于助人!

【讨论】:

  • 得到这个错误:(: Uncaught TypeError: Cannot read property 'getActiveGroup' of undefined
  • @kabrice getActiveGroup 方法已删除。使用这个:canvas.getActiveObjects();
猜你喜欢
  • 2022-01-21
  • 2019-12-25
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
相关资源
最近更新 更多