У меня есть 7 объектов (SVG), которые должны быть распределены по горизонтали на холсте, но я не могу понять, как это сделать.
Приведенный ниже код любезно работает, за исключением того, что в цикле for он не работает.не ждите, пока изображение будет загружено, поэтому в результате изображения будут выровнены, но в случайном порядке.Более того, значение масштаба внутри метода ткани loadSVGFromURL
всегда 2
.
Я также пытался поместить fabric.loadSVGFromURL
в отдельную функцию, но тогда я не могу использовать этот метод для подсчета ширины объектов.
вроде:
function loadSVG(url, scale) {
}
Есть ли какой-нибудь более простой способ достичь моей цели?
Ниже моего кода:
this.canvas = new fabric.Canvas(this.$refs.image, {
backgroundColor: '#fff',
})
this.canvas.clear()
var width = this.canvas.getWidth(),
imgsArr = [
{url: "/storage/slot-images/image_162.svg", scale: 2},
{url: "/images/storymachine/arrow.svg", scale: 0.5},
{url: "/storage/slot-images/image_31.svg", scale: 2},
{url: "/images/storymachine/arrow.svg", scale: 0.5},
{url: "/storage/slot-images/image_149.svg", scale: 2},
{url: "/images/storymachine/arrow.svg", scale: 0.5},
{url: "/storage/slot-images/image_193.svg", scale: 2},
],
cacheWidth = 0
for (var i = 0; i < imgsArr.length; i++) {
var url = imgsArr[i].url,
scale = imgsArr[i].scale
fabric.loadSVGFromURL(url, (objs, opts) => {
var obj = fabric.util.groupSVGElements(objs, opts)
this.canvas.add(obj)
obj.center()
obj.set({
selectable: false,
centeredScaling: true,
scaleX: scale,
scaleY: scale,
left: cacheWidth,
})
cacheWidth = cacheWidth + obj.getScaledWidth()
})
this.canvas.renderAll()
}
ссылка на JSfiddle