【问题标题】:Bad position after loading fabric.js JSON加载fabric.js JSON后位置不好
【发布时间】:2017-12-17 10:34:12
【问题描述】:

一旦我从数据库加载 JSON,一些对象的位置是 (0,0),即使在 JSON 中 topleft 属性的值不是 0。 我有一个自定义类,它具有来自MyElement 对象的附加属性:

var MyElement = {
    contextMenu: ['delete'],
    toObject() {
        return {
            contextMenu: this.contextMenu
        };
    }
};
var MyImage = fabric.util.createClass(fabric.Image, MyElement, {
    type: 'MyImage',

    toObject(propertiesToInclude) {
        return this.callSuper('toObject', Object.assign(propertiesToInclude, MyElement.toObject.apply(this)));
    }
});

MyImage.fromURL = function(url, callback, imgOptions) {
    fabric.util.loadImage(url, function(img) {
        callback && callback(new MyImage(img, imgOptions));
    }, null, imgOptions && imgOptions.crossOrigin);
};

fabric.MyImage = MyImage;

fabric.MyImage.fromObject = function(object, callback) {
    fabric.util.loadImage(object.src, function(img) {
        callback && callback(new fabric.MyImage(img, object));
    });
};

数据库中的 JSON 在这里:JSON represantation of MyImage

在通过 canvas.loadFromJSON(data, canvas.renderAll.bind(canvas)); 加载此 JSON 后,MyImage 显示在 (0,0) 而不是 top = 191left = 271 即使 console.log(instanceOfMyImage) 显示的对象表示具有正确的 topleft。为什么?画布是否在设置属性之前渲染对象?但是显示图像,因此设置了属性...... 我注意到fabric.Image 的实例运行良好。我的实现中的错误在哪里?

【问题讨论】:

    标签: javascript json html5-canvas fabricjs


    【解决方案1】:

    我在代码中找到了解决方案和错误。我需要编写一个与fabric.Image 具有相同签名的initialize 方法,并且它可以工作。在缺少的代码下方:

    initialize: function(element, options, callback) {
            this.callSuper('initialize', options);
            this._initElement(element, options, callback);
        },
    

    【讨论】:

      猜你喜欢
      • 2016-01-16
      • 2022-01-16
      • 2013-10-27
      • 2011-10-16
      • 2017-01-20
      • 2014-02-06
      • 2014-08-17
      • 2018-12-12
      • 1970-01-01
      相关资源
      最近更新 更多