【问题标题】:canvas free drawing and adding shapes画布免费绘图和添加形状
【发布时间】:2016-07-07 20:09:10
【问题描述】:

我正在尝试创建一个免费的绘图工具,其中包含向画布添加形状的选项。用户将在画布底部有带有形状的按钮。如果他点击一个圆圈,那么一个圆圈将添加到画布中,并且可以选择缩放它并在画布上移动。

我的问题是当我添加一个形状而不是尝试单击它来移动它时,画布绘制而不是选择形状。

我正在尝试使用 fabric.js,但我没有在他们的演示中看到如何同时拥有这两者。

【问题讨论】:

    标签: canvas html5-canvas fabricjs


    【解决方案1】:

    我通过在页面上有两个画布区域解决了我的应用程序中的这个问题。就我而言,我将第一个命名为“prep”,将实际绘图区域命名为“stage”

     <div class="col-sm-2"> 
        <canvas id="prep" width="150" height="500" style= "border: 1px solid #d3d3d3;"></canvas>
    </div>
      <div class="col-sm-10">
        <canvas id="stage" width="650" height="500" style="border: 1px solid #d3d3d3;"></canvas>
    </div>
    

    然后,我在准备区添加了一个 mouse:down 事件。如果在“准备”区域中单击形状,则会将克隆对象添加到“舞台”区域。

    prep.on('mouse:down', function(options){
    if(options.target) {
        if (fabric.util.getKlass(options.target.type).async) {  
            console.log('entered')
          options.target.clone(function (clone) {
            clone.set({left: 200, top: 100});
            stage.add(clone);
          });
        }
        else {
          stage.add(options.target.clone().set({left: 100, top: 100}));
        }
    }
    

    });

    当您初始化要放置在准备区域的形状时,您可以将它们设为可选:false。在我的应用程序中,selectable:false 在克隆期间没有被传输(不确定这是否是我的代码中的错误) - 您也可以在克隆期间更改属性。

    注意 - 代码的 if(...async) 部分是为了处理我在准备区域中同时具有 SVG 和正常形状的事实。如果您只有标准织物形状,则只需要 else 语句中包含的代码。

    【讨论】:

    • 谢谢。即使我仍然不熟悉面料,我也会尝试一下。
    • 没有织物也能工作吗?我已经编写了代码来在画布上进行免费绘图
    • 一般方法可以在没有 Fabric 的情况下使用,但我不知道您需要哪些代码的具体细节。我采用的方法的总结是 a) 有两个画布,b) 使用 mouse:down 附加到画布 1 从一个克隆到另一个。通过附加到画布 1,单击画布 2 中复制的形状将不会执行复制。不过,我强烈推荐使用 Fabric 来制作你的免费绘图工具 - 它让你可以很容易地做很多事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2018-10-10
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    相关资源
    最近更新 更多