【发布时间】:2020-08-26 20:44:56
【问题描述】:
我有一系列 4 张图像,我试图将它们放置在 fabricjs 中的指定坐标处,但有时在页面加载时它们的放置不一致。刷新一次或两次通常会给出正确的布局。试图阻止这种情况发生。
有人知道如何解决这个问题吗?这是我的代码:
var objects = [
{ type: "image", filename : "tv.png" , x: 688, y: 184, angle: 0, zIndex: 10 },
{ type: "image", filename : "polaroid.jpg" , x: 347, y: 515 },
{ type: "image", filename : "polaroid.jpg" , x: 138, y: 643 },
{ type: "image", filename : "polaroid.jpg" , x: 429, y: 803 },
{ type: "text", text: "Your favorite band", x: 1168, y: 1163, angle: -17, canvasRef: null,zIndex: 50 }
];
for (var i=0; i<objects.length;i++){
var objRef = objects[i];
switch(objRef.type){
case 'image':
var url = "img/" + objRef.filename;
fabric.Image.fromURL(url, function(img) {
var objRef = objects[curObject];
img.set({
left: objRef.x,
top: objRef.y,
angle: objRef.angle,
hasBorders: false,
hasControls: false,
hasRotatingPoint: false,
lockMovementX: true,
lockMovementY: true
});
canvas.add(img).renderAll();
img.moveTo(objRef.zIndex);
curObject++;
//canvas.setActiveObject(img);
});
break;
case 'text':
var text = objRef.text;
var fabricText = new fabric.Text(text, {
left: objRef.x,
top: objRef.y,
angle: objRef.angle,
hasBorders: false,
hasControls: false,
hasRotatingPoint: false,
lockMovementX: true,
lockMovementY: true
});
objRef.canvasRef = fabricText;
addTextListeners(fabricText);
canvas.add(fabricText);
break;
}
}
我还应该提到,在 window.ready 之后,并且在使用 imagesloaded 插件预加载了 fabric 尝试加载到画布的所有图像之后,这些代码都不会发生。
我还应该提到,我尝试在每次加载(而不是循环)之间使用 setTimeout 延迟加载每个连续图像,并将 canvas.renderAll() 保存到循环之后,但没有成功。甚至尝试运行循环以在将项目放置在屏幕上后重新定位它们。下面是问题的图片 - 分别是正确的和不正确的。
【问题讨论】:
标签: javascript canvas fabricjs