2013-03-28 11 views
6

Gibt es eine Möglichkeit, die Farbe eines Svg in Stoff auf der Leinwand mit loadSVGFromURL zu ändern? Die SVG ist nur ein Pfeil, wenn ich die Füllung oder den Strich nicht einstellen kann, kann ich das mit einem Filter machen?Fabric.js - Farbe/Füllung/Strich des importierten Svg ändern

$("input:radio[id='arrow']").click(function() { 
fabric.loadSVGFromURL('../scripts/svg/arrow.svg', function(objects) { 
      var group = new fabric.PathGroup(objects, { 
      left: 165, 
      top: 100, 
      width: 295, 
      height: 40, 
      fill: colourSet 
     }); 
     canvas.add(group); 
     canvas.renderAll(); 
      }); 
      }); 
+0

http://fabricjs.com/hovering/ und http://fabricjs.com/customization/ wird dich dorthin bringen – dsdsdsdsd

Antwort

16
var colorSet = '#00FFFF'; 

$("input:radio[id='arrow']").click(function() { 
    fabric.loadSVGFromURL('../scripts/svg/arrow.svg', function(objects, options) { 
    var shape = fabric.util.groupSVGElements(objects, options); 
    shape.set({ 
     left: 165, 
     top: 100, 
     width: 295, 
     height: 40 
    }); 
    if (shape.isSameColor && shape.isSameColor() || !shape.paths) { 
     shape.setFill(colorSet); 
    } 
    else if (shape.paths) { 
     for (var i = 0; i < shape.paths.length; i++) { 
     shape.paths[i].setFill(colorSet); 
     } 
    } 
    canvas.add(shape); 
    canvas.renderAll(); 
    }); 
}); 

Die Funktion setFill auf fabric.PathGroup Objekte funktioniert nur, wenn alle Pfade die gleiche Farbe hat: https://github.com/kangax/fabric.js/blob/master/src/path_group.class.js#L99

+0

Hey Kienz, danke für deine Hilfe, aber der Pfeil wird überhaupt nicht mit dem Code auf die Leinwand gesetzt ... – IlludiumPu36

+1

Hey Peter, ich habe jsfiddle Beispiel gemacht (mit loadSVGFromString anstelle von loadSVGFromURL): http: //jsfiddle.n et/Kienz/nFqpB/ Kannst du deine SVG posten ?! – Kienz

+2

"Du sagst Farbe, ich sage Farbe, lass uns das Ganze ausrufen ..." (Entschuldigung an George und Ira Gershwin). Das Problem war, dass ich colorSet (englische Schreibweise) und die Funktion, die auf 'colorSet' (Yank-Schreibweise ...) bezogen ist, verwendete. Alles funktioniert jetzt. – IlludiumPu36

0

können Sie OBJECT.setFill ('FILL_COLOR'); zum Beispiel

rect.setFill('red');