2017-09-13 1 views
0

Donc, quand je charge mes données depuis JSON, la mise à l'échelle de X et Y n'est pas respectée, donc quand l'objet se charge, il conserve sa hauteur/largeur d'origine. Une raison pour cela et de toute façon pour contourner cela?fabricjs - loadFromJSON ne respectant pas la mise à l'échelle

Le rectangle gauche doit être plus grand que le rectangle.

var canvas = new fabric.Canvas('c'); 
 

 
let json = {"objects":[{"type":"rect","originx":"left","originy":"top","left":323,"top":259,"width":50,"height":300,"fill":"#ff5b6d","stroke":null,"strokewidth":0,"strokedasharray":null,"strokelinecap":"butt","strokelinejoin":"miter","strokemiterlimit":10,"scalex":1.54,"scaley":1.54,"angle":0,"flipx":false,"flipy":false,"opacity":1,"shadow":null,"visible":true,"clipto":null,"backgroundcolor":"","fillrule":"nonzero","globalcompositeoperation":"source-over","transformmatrix":null,"skewx":0,"skewy":0,"rx":0,"ry":0},{"type":"rect","originx":"left","originy":"top","left":205,"top":198,"width":50,"height":300,"fill":"#ff5b6d","stroke":null,"strokewidth":1,"strokedasharray":null,"strokelinecap":"butt","strokelinejoin":"miter","strokemiterlimit":10,"scalex":1,"scaley":1,"angle":0,"flipx":false,"flipy":false,"opacity":1,"shadow":null,"visible":true,"clipto":null,"backgroundcolor":"","fillrule":"nonzero","globalcompositeoperation":"source-over","transformmatrix":null,"skewx":0,"skewy":0,"rx":0,"ry":0}]} 
 

 
canvas.loadFromJSON(json);
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.18/fabric.min.js"></script> 
 
<canvas id="c" width="1000" height="1000"></canvas>

Répondre

2

var canvas = new fabric.Canvas('c'); 
 

 
let json = {"objects":[{"type":"rect","originX":"left","originY":"top","left":323,"top":259,"width":50,"height":300,"fill":"#ff5b6d","stroke":null,"strokeWidth":0,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,"scaleX":1.54,"scaleY":1.54,"angle":0,"flipX":false,"flipY":false,"opacity":1,"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"rx":0,"ry":0},{"type":"rect","originX":"left","originY":"top","left":205,"top":198,"width":50,"height":300,"fill":"#ff5b6d","stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipy":false,"opacity":1,"shadow":null,"visible":true,"clipto":null,"backgroundcolor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"rx":0,"ry":0}]} 
 

 
canvas.loadFromJSON(json);
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.18/fabric.min.js"></script> 
 
<canvas id="c" width="1000" height="1000"></canvas>

fabricjs propriétés d'objets sont en cas de chameau. Si vous fournissez tous leur clé, tout fonctionnera bien. J'ai changé votre clef de données de json à l'affaire de chameau. Vous pouvez obtenir toutes les propriétés d'objet here.

+0

hmm je vais essayer avec le camelcase. J'ai aussi des problèmes avec le fait d'être importé et de ne pas enregistrer correctement. J'enregistre mes données en utilisant 'toJSON'. Je vais tourner autour d'un peu d'abord –

+1

J'ai réalisé mon problème, sur le backend je traitais accidentellement le texte (en faisant tous les caractères minuscules). Fixé cela et maintenant cela fonctionne comme prévu :) –

0

On dirait que vous pouvez manipuler chaque objet comme il est en cours de construction ou quelque chose que.

var canvas = new fabric.Canvas('c'); 
 

 
let json = {"objects":[{"type":"rect","originx":"left","originy":"top","left":323,"top":259,"width":50,"height":300,"fill":"#ff5b6d","stroke":null,"strokewidth":0,"strokedasharray":null,"strokelinecap":"butt","strokelinejoin":"miter","strokemiterlimit":10,"scalex":1.54,"scaley":1.54,"angle":0,"flipx":false,"flipy":false,"opacity":1,"shadow":null,"visible":true,"clipto":null,"backgroundcolor":"","fillrule":"nonzero","globalcompositeoperation":"source-over","transformmatrix":null,"skewx":0,"skewy":0,"rx":0,"ry":0},{"type":"rect","originx":"left","originy":"top","left":205,"top":198,"width":50,"height":300,"fill":"#ff5b6d","stroke":null,"strokewidth":1,"strokedasharray":null,"strokelinecap":"butt","strokelinejoin":"miter","strokemiterlimit":10,"scalex":1,"scaley":1,"angle":0,"flipx":false,"flipy":false,"opacity":1,"shadow":null,"visible":true,"clipto":null,"backgroundcolor":"","fillrule":"nonzero","globalcompositeoperation":"source-over","transformmatrix":null,"skewx":0,"skewy":0,"rx":0,"ry":0}]} 
 

 
canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), (o, object) => { 
 
        object.scale(o.scalex, o.scaley); 
 
        }); 
 
canvas.renderAll();
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.18/fabric.min.js"></script> 
 
<canvas id="c" width="1000" height="1000"></canvas>

+0

pouvez-vous expliquer comment vous avez obtenu cette toile JSON ?? toutes les propriétés devraient être dans le cas de chameau, mais vous avez tous en minuscules. c'est y que ça ne marche pas. – Durga