Sto creando un'applicazione utilizzando fabric.js
e ho riscontrato un comportamento davvero strano. Sto aggiungendo sia le immagini che le istanze di testo, utilizzando il normale fabric.Canvas
(non fabric.StaticCanvas
) e non sono in grado di spostare o ridimensionare questi elementi dopo l'aggiunta. Ho aggiunto solo un paio di ogni tipo. La funzionalità di base è avvolto in un callback legato ad un evento click su qualche tasto, ma la funzionalità del tessuto di base simile a questa (semplificato, ma quasi tutto è lo stesso per quanto riguarda codice relativo tessuto):La tela FabricJS è "bloccata" dopo l'aggiunta di elementi
<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();
});
});
Il codice sopra rende bene gli elementi, ma non possono essere ridimensionati o spostati, e agire statici. La cosa strana è che se apro e chiudo il mio chrome dev-panel (usando F12 o [Ctrl/CMD] + SHIFT + I due volte), la tela recupera la funzionalità e tutto funziona di nuovo. Ho anche qualche cosa del serveride che sta accadendo (questo è solo un assaggio di quello che sto facendo), ma non ho idea di come rintracciare ulteriormente questo strano comportamento. Sto usando il codice più recente (creato da github repo). Pensieri?
E 'possibile che tela offset interno non viene aggiornato correttamente. Qualcosa nella pagina potrebbe cambiare le dimensioni/posizione, rendendo la tela posizionata in una posizione diversa da quella che era durante l'inizializzazione. Prova a chiamare 'canvas.calcOffset()' dopo la chiamata 'renderAll', o dopo aver aggiunto quegli oggetti. – kangax
Questo l'ha risolto! Per curiosità: perché non viene chiamato all'interno di 'renderAll()'? Per favore aggiungilo come risposta in modo che io possa cancellarlo - e grazie! – sa125
Certo, aggiunto, con spiegazione. Sono contento che ci abbia aiutato. – kangax