【问题标题】:Fabric.js object:selected, object not selectedFabric.js 对象:已选择,未选择对象
【发布时间】:2013-11-25 07:10:11
【问题描述】:

使用 Fabric.js,我正在处理一个名为 header 的文本对象。当标题区域被选中时,一个 div 会淡入,并带有两个可用于设置文本和填充的输入字段。这对我有用。

接下来我要尝试处理的是,当取消选择标题对象时,我将淡出我的 div。处理 header.off() 的正确方法是什么?

header.on('selected', function() {

  $('#header-text-edit').fadeIn('fast');

  // watch for header.input changes
  scope.$watch("header.input", function(value) {
    header.text = scope.header.input;
  });

  // watch for header.color changes
  scope.$watch("header.color", function(value) {
    header.fill = scope.header.color;
  });
});

【问题讨论】:

  • header.off() 将用于删除事件处理程序。它与事件的反面没有任何关系。 on() 添加事件处理程序,off() 删除它。

标签: jquery angularjs fabricjs


【解决方案1】:

你需要:

canvas.on('selection:cleared', function() {
  ...
});

看看教程中的Events DemoEvents Section

【讨论】:

  • 它已经很老了,但以防万一有人偶然发现它 - 重要的是要注意从选择移动到另一个选择不会触发 'selection:cleared' 事件。
  • 补充@NimrodShory 提到的内容,似乎从一个选择移动到另一个选择不会触发对象:选择...为什么它不两者都做?...更新:它似乎选择:更新有助于查看正在发生的事情......
【解决方案2】:

对于fabricjs 2.0 branch,画布上的选择事件应如下所示:

canvas.on('selection:created', function () {
   //...
});

canvas.on('selection:cleared', function () {
   //...
});

selected 事件适用于画布上的单个对象

var rect = new fabric.Rect({ width: 100, height: 50, fill: 'green' });
rect.on('selected', function() {
    console.log('selected a rectangle');
});

【讨论】:

  • 如果我单击一个元素,然后立即单击另一个元素而不单击其他地方,我无法为新元素触发 selection:created,只有在清除现有元素选择并且下一个元素为点了,怎么解决?还有什么可以处理的吗?
  • 您可能还想观察selection:updated 事件。
猜你喜欢
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 2013-12-04
  • 2013-09-02
  • 2013-01-28
  • 1970-01-01
相关资源
最近更新 更多