【问题标题】:delete group / all selected objects in fabric js在fabric js中删除组/所有选定的对象
【发布时间】:2018-08-07 03:23:05
【问题描述】:

我正在尝试删除 fabric js 中的组(版本:2.0.0-beta.7)。
但它只适用于单个对象,那么如何修复它以便删除所有选定的对象?

$('.delete_object').click(function(){
    var activeObject = canvas.getActiveObject();
    if (activeObject.type==='activeSelection') { //For Group selection
        if (confirm('Are you sure?')) {
            var objs = [];
            activeObject.forEach(function(o) {
                objs.push(o);
            });
            canvas.remove(...objs);
        }
    }
    else if (activeObject) {
        if (confirm('Are you sure?')) {
            canvas.remove(activeObject);
        }
    }
});

codepen:https://codepen.io/dhavalsisodiya/pen/bLQxKo

步骤

1) 尝试添加 2 个或更多对象
2) 选择其中一些
3)现在尝试删除它,它会通过这个错误:TypeError: activeObject.forEach is not a function

【问题讨论】:

    标签: canvas fabricjs fabricjs2


    【解决方案1】:

    使用getActiveObjects获取所有当前选中的对象并从画布中移除。

    演示

    var canvas = new fabric.Canvas('canvas1');
    
    $('.add_shape').click(function() {
      var cur_value = $(this).attr('data-rel');
      if (cur_value != '') {
        switch (cur_value) {
          case 'rectangle':
            var rect = new fabric.Rect({
              left: 50,
              top: 50,
              fill: '#aaa',
              width: 50,
              height: 50,
              opacity: 1,
              stroke: '#000',
              strokeWidth: 1
            });
            canvas.add(rect);
            canvas.setActiveObject(rect);
            break;
          case 'circle':
            var circle = new fabric.Circle({
              left: 50,
              top: 50,
              fill: '#aaa',
              radius: 50,
              opacity: 1,
              stroke: '#000',
              strokeWidth: 1
            });
            canvas.add(circle);
            canvas.setActiveObject(circle);
            break;
        }
      }
    });
    
    canvas.on('object:scaling', (e) => {
      var o = e.target;
      o.strokeWidth = o.strokeWidth;
    });
    
    $(".add_text").click(function() {
      var add_text = new fabric.IText('Edit Here', {
        left: 20,
        top: 30,
        fontSize: 18,
        editable: true
      });
    
      canvas.add(add_text);
      canvas.setActiveObject(add_text);
    });
    
    $('.delete_object').click(function() {
      var activeObject = canvas.getActiveObjects();
      if (confirm('Are you sure?')) {
        canvas.discardActiveObject();
        canvas.remove(...activeObject);
      }
    });
    button{
      max-resolution: 10px;
      height:30px;
    }
    div{
      margin:10px
    }
    .delete_object{
      background-color:red;
      color:white
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
    <div>
      <button class="add_shape" data-rel="circle">Add Circle</button>
    
      <button class="add_shape" data-rel="rectangle">Add Rectangle</button>
      
      <button class="add_text">Add Text</button>
      <button class="delete_object">Delete</button>
      
    </div>
    
    <canvas id="canvas1" width="600" height="300" style="border:1px solid #000000;"></canvas>

    【讨论】:

    【解决方案2】:
     let activeObjects = canvas.getActiveObjects();
        if (activeObjects.length) {
            if (confirm('Do you want to delete the selected item??')) {
                activeObjects.forEach(function (object) {
                    canvas.remove(object);
                });
            }
        }
        else {
            alert('Please select the drawing to delete')
        }
    

    【讨论】:

    • 请添加解释 - 单独的纯代码块不是很有用。
    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 2014-06-15
    • 2018-08-18
    • 1970-01-01
    • 2018-05-03
    • 2020-03-27
    • 2021-09-19
    • 2021-01-04
    相关资源
    最近更新 更多