fabric.js - 如果在新的fabric.Circle()括号外定义属性,则Circle不起作用

时间:2015-05-15 09:08:43

标签: javascript canvas fabricjs

当我在括号中创建一个新的圆形对象时,如果需要生成一个圆,则不会出现问题。 (旧方式)

function vanillaObjectFunc(type) {

    if (type === 'Rect') {
        var tObject = new fabric.Rect({
            width: 50,
            height: 50,
            opacity: 0.8,
            fill: 'black',
            left: canvasB.width / 2,
            top: canvasB.height / 2
        });
    } else {
        var tObject = new fabric.Circle({
            radius: 20,
            opacity: 0.8,
            fill: 'black',
            left: canvasB.width / 2,
            top: canvasB.height / 2
        });
    }

    canvasB.getObjects();
    canvasB.add(tObject);
    canvasB.selection = false;
    canvasB.renderAll();
    canvasB.calcOffset();
}

但现在在动态函数中,在创建圆形对象并在画布上添加圆形后定义所有属性,应该如下所示:(新方法)

function newObjectFunc(type) {

    var tObject = new fabric[type]({});

    tObject['opacity'] = 0.8;
    tObject['fill'] = 'black';
    tObject['left'] = canvasA.width / 2;
    tObject['top'] = canvasA.height / 2;


    if (type == 'Circle') {
        tObject['radius'] = 100;
    } else if (type == 'Rect') {
        tObject['width'] = 50;
        tObject['height'] = 50;
    }

    canvasA.getObjects();
    canvasA.add(tObject);
    canvasA.selection = false;
    canvasA.renderAll();
    canvasA.calcOffset();
}

看起来很简单,但是有一些奇怪的问题,因为Circle不会生成,这种方式我找不到原因。

属性是相同的。 circle-object的Console.log(新方式)看起来也是正确的。

https://jsfiddle.net/Sascha/052jnLu6/2/

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

在这种情况下,您应避免直接分配属性并改为使用fabric.Object.set()

QStringList genderList;
genderList << "Male" << Female" << "Other";
ui->genderComboBox->setCurrentIndex(genderList.indexOf(sl[2]));

您会找到更新的小提琴here