javascript - 在 FabricJS 中创建 "Tools"?

标签 javascript canvas fabricjs paperjs

我正在开发一个简单的编辑器,您可以在其中移动文本、图片和几乎任何内容。这并不是太复杂,但是我在使用 PaperJS 和 FabricJS 之间进行选择时遇到了问题 - 主要原因是能够本地转换项目(旋转、缩放等)。

尽管我喜欢 PaperJS,但我确实正在考虑转向 FabricJS。我为 PaperJS 创建了这样的工具:

function shapeTool(options) {
    this.tool = new Tool();
    var options = $.extend({
        shape: "circle",
    }, options);

    this.tool.onMouseUp = function(event) { ... }

    ...
    ...

    this.tool.activate();
    return tool;
}

这可能是创建它们的最糟糕的方法,但对我来说,很容易将所有这些函数放入文件中并初始化我的工具:var tool = new shapeTool(options);

由于我可能会转向 Fabric,因此制作模块化工具的最简单方法是什么。我可以在其中交换它们吗? (即我有一个工具栏,当我单击按钮时,我的工具发生了变化,这样我就可以自由绘图、插入图像等)

澄清:当我指的是工具时,我指的是 PaperJS 中的工具。在 Paper 中,我们可以交换 Canvas 的事件工具。该工具将处理 Canvas 当前的 mouseDown、KeyDown 等事件。我可以为诸如插入形状和图像之类的事情编写不同的工具,并为自由绘图编写一个工具。然后我可以将事件工具设置为任一工具。这将允许我在自由绘制和插入形状之间切换。

谢谢, 亨特·M.

最佳答案

在 FabricJS 中,您可以通过事件与鼠标行为进行交互。

Cavas火灾:

  • 鼠标:向下
  • 鼠标:移动
  • 鼠标:向上
  • 鼠标:悬停
  • 鼠标:退出

您使用ONOFF注册事件:

canvas.on('mouse:down', handler);

您刚刚处于预定义状态,即 DrawingMode true 或 false

canvas.isDrawingMode = true;

免费绘画开始。

当不向下和向上绘制鼠标或移动时,可以通过添加到canvs的属性来自定义。

canvas.myState = 'addStamps';

然后在你的处理程序中:

handler(e) {
  switch (canvas.myState) {
    case 'deleteItems':
      e.target && canvas.remove(e.target);
    break;
    case 'addStamps':
      canvas.add(new fabric.Image('stamp.jpg'));
    break;
  }
}

如果您需要除点击之外的交互,则必须对 mouse:up 或 mosue:move 执行相同的操作。

这是获得类似效果的多种方法之一。

关于javascript - 在 FabricJS 中创建 "Tools"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960209/

相关文章:

javascript - Discord Bot 无法按名称或 ID 找到 channel

javascript - meteor :隐藏或删除元素?什么是最好的方法

javascript - html5 Canvas 图像不显示或图像未加载

javascript - Fabric.js - 将对象创建附加到鼠标单击

javascript - 使用fabric js进行图像转换时,边界框超出边界

Javascript 不包括 jQuery 插件?

javascript - 多层谷歌融合表启用MapTips

java - 没有 awt/swing 类的 Canvas 到 base64 图像

javascript - 如何使用 html canvas 和 javascript 用鼠标绘制平滑的连续线

canvas - 将 Fabric.js 对象从一个 Canvas 拖到另一个 Canvas 上