Ich erstelle eine Anwendung mit fabric.js
, und erlebt wirklich seltsames Verhalten. Ich füge sowohl Bilder als auch Textinstanzen unter Verwendung der regulären fabric.Canvas
(nicht fabric.StaticCanvas
) hinzu und kann diese Elemente nach dem Hinzufügen nicht verschieben oder ihre Größe ändern. Ich habe nur ein paar von jedem Typ hinzugefügt. Die Basisfunktionalität wird in einem Rückruf eingewickelt auf einigen Tasten gebunden an ein Click-Ereignis, aber die Core Fabric-Funktionalität sieht ungefähr so aus (vereinfachte, aber fast alle sind gleich so weit wie Stoff bezogenen Code):FabricJS Canvas ist nach dem Hinzufügen von Elementen "stecken geblieben"
<canvas id="myCanvas" height=600 width=800></canvas>
<input id="addStuff" type="button" value="Add!" />
....
var canvas = new fabric.Canvas('myCanvas');
canvas.renderOnAddition = true;
$(function(){
$('#addStuff').on('click', function(e) {
var text = new fabric.Text("Hello, world", {
top : 100,
left : 100,
fontSize : 12,
fontFamily : 'Delicious_500'
});
text.hasControls = false;
canvas.add(text);
fabric.Image.fromURL('./img/pic.png', function(img) {
var imgX = img.set({
top: 200,
left: 100,
});
canvas.add(imgX);
});
canvas.renderAll();
});
});
Der obige Code rendert die Elemente gut, aber sie können nicht skaliert oder bewegt werden und wirken statisch. Das seltsame Ding ist, dass, wenn ich mein chrome dev-panel öffne und schließe (mit F12 oder [Ctrl/CMD] + SHIFT + I zweimal), die Leinwand wieder funktioniert und alles wieder funktioniert. Ich habe auch ein paar Server-Sachen (das ist nur eine Probe von dem, was ich mache), aber ich habe keine Ahnung, wie ich das weiter auf dieses seltsame Verhalten zurückführen kann. Ich benutze den neuesten Code (gebaut von Github Repo). Gedanken?
Es ist möglich, dass Leinwand interne Offset ordnungsgemäß nicht aktualisiert. Ein Element auf der Seite kann die Abmessungen/Position ändern, sodass die Arbeitsfläche an einer anderen Position positioniert wird als während der Initialisierung. Versuchen Sie, 'canvas.calcOffset()' nach dem Aufruf 'renderAll' oder nach dem Hinzufügen dieser Objekte aufzurufen. – kangax
Das hat es gelöst! Aus Neugier - warum heißt es nicht innerhalb von 'renderAll()'? Bitte fügen Sie es als Antwort hinzu, damit ich es abzeichnen kann - und danke! – sa125
Sicher, hinzugefügt, mit Erklärung. Froh, dass es geholfen hat. – kangax