Fabric.js添加图像顺序

Fabric.js add images order

本文关键字:顺序 图像 添加 js Fabric      更新时间:2023-09-26

我试图严格地将图像添加到画布中,但图像是随机添加的。

怎么了?

这是我的简单代码。

var canvas = new fabric.Canvas("preview");
var imgs = ['bgBottom','bgTop', 'bgLevel', 'bgCircle'];
for (var i=0; i<imgs.length;i++){
            var url = imgs[i]+'.png';
                    fabric.Image.fromURL(url, function (oImg) {
                        canvas.add(oImg)
                    })
}

fabric.Image.fromURL在后台加载图像,并在图像加载完成后运行传递给它的匿名函数,该函数将图像添加到画布中。浏览器加载图像的顺序会有所不同,你不能依赖它的特定顺序。

看看这个jsfiddle,它显示加载一个图像数组并确保它们以设置的顺序显示。这是通过在加载之前将图像添加到画布来实现的;它只是在图像可以显示之前不进行渲染。

jsfiddle的代码:

var SelfLoadingImage = fabric.util.createClass(fabric.Object, {
    initialize: function(src) {
        this.image = new Image();
        this.image.src = src;
        this.image.onload = (function() {
            this.width = this.image.width;
            this.height = this.image.height;
            this.loaded = true;
            this.setCoords();
            this.fire('image:loaded');
            canvas.renderAll();
        }).bind(this);
    },
    _render: function(ctx)
    {
        if (this.loaded) {
            ctx.drawImage(this.image, -this.width / 2, -this.height / 2);
        }
    }
});
var canvas = new fabric.Canvas("preview");
var imgs = [
    'http://icons.iconarchive.com/icons/fasticon/ifunny/128/dog-icon.png', // dog
    'http://33.media.tumblr.com/avatar_14ee6ada72a4_128.png', // cat
    'http://upload.wikimedia.org/wikipedia/commons/b/bc/Nuvola_devices_mouse.png' // mouse
];
for (var i=0; i<imgs.length;i++){
    var url = imgs[i];
    var img = new SelfLoadingImage(url);
    canvas.add(img);
}