2017-08-16 95 views
0

我正在构建一个可以设计自己的名片的应用程序。我必须通过一次单击将对象添加到两个画布。这里是我的代码:javascript fabricjs - 在一次点击中将对象添加到多个画布

$('#image-list').on('click','.image-option',function(e) { 
     var el = e.target; 
     /*temp code*/ 
     var offset = 50; 
     var left = fabric.util.getRandomInt(0 + offset, 200 - offset); 
     var top = fabric.util.getRandomInt(0 + offset, 400 - offset); 
     var angle = fabric.util.getRandomInt(-20, 40); 
     var width = fabric.util.getRandomInt(30, 50); 
     var opacity = (function(min, max){ return Math.random() * (max - min) + min; })(0.5, 1); 
     var canvasObject; 
     // if ($('#flip').attr('data-facing') === 'front') { 
     // canvasObject = canvas; 
     // } else { 
     // canvasObject = canvas2; 
     // } 

     fabric.Image.fromURL(el.src, function(image) { 
      image.set({ 
       left: left, 
       top: top, 
       angle: 0, 
       padding: 10, 
       cornersize: 10, 
       hasRotatingPoint:true 
      }); 

      canvas.add(image); 
      canvas2.add(image); 
     }); 
    }) 

的问题是,当我调整或将“前画布”上的图像,它也呈现同样的方式,在“回画布”。就我而言,我不想让对象成为那种方式。那么有没有办法阻止在其他画布上进行“镜像”操作?谢谢。

回答

1

您不能将相同的对象添加到2个画布。 您必须创建2个对象。

另请注意,如果您的网页上有html图片元素,则无需再次从网址加载它。已经加载,因此将图像元素直接传递给构造函数

$('#image-list').on('click','.image-option',function(e) { 
    var el = e.target; 
    /*temp code*/ 
    var offset = 50; 
    var left = fabric.util.getRandomInt(0 + offset, 200 - offset); 
    var top = fabric.util.getRandomInt(0 + offset, 400 - offset); 
    var angle = fabric.util.getRandomInt(-20, 40); 
    var width = fabric.util.getRandomInt(30, 50); 
    var opacity = (function(min, max){ return Math.random() * (max - min) + min; })(0.5, 1); 
    var canvasObject; 
    // if ($('#flip').attr('data-facing') === 'front') { 
    // canvasObject = canvas; 
    // } else { 
    // canvasObject = canvas2; 
    // } 

    image = new fabric.Image(el, { 
      left: left, 
      top: top, 
      angle: 0, 
      padding: 10, 
      cornersize: 10, 
      hasRotatingPoint:true 
     }); 

    image2 = new fabric.Image(el, { 
      left: left, 
      top: top, 
      angle: 0, 
      padding: 10, 
      cornersize: 10, 
      hasRotatingPoint:true 
     }); 

     canvas.add(image); 
     canvas2.add(image2); 
    }); 
}) 
+0

感谢您的回答。我已经使用了该解决方案。我确实必须为另一个画布创建另一个对象。 – padejar

相关问题