2017-08-16 1 views
0

Je construis une application qui peut concevoir votre propre carte de visite. Je dois ajouter un objet à deux toiles en un seul clic. Voici mes codes:javascript fabricjs - Ajouter un objet à plusieurs toiles en un seul clic

$('#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); 
     }); 
    }) 

Le problème est, quand je redimensionné ou déplacer l'image sur la « toile avant », il rend également la même façon dans la « toile arrière ». Dans mon cas, je ne veux pas que l'objet soit comme ça. Alors, y a-t-il un moyen d'empêcher que l'objet ne se reflète sur l'autre toile? Merci.

Répondre

1

Vous ne pouvez pas ajouter le même objet à 2 toiles. Vous devez créer 2 objets. Prenez également note que si vous avez un élément d'image html sur votre page, vous n'avez pas besoin de le charger à nouveau à partir de l'adresse URL. Est déjà chargé, donc passez directement l'élément image au constructeur

$('#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

Merci pour votre réponse. J'ai déjà utilisé cette solution. Je dois en effet créer un autre objet pour une autre toile. – padejar