【问题标题】:Unable to maintain strokeWidth for fabricjs group element无法维护 fabricjs 组元素的 strokeWidth
【发布时间】:2015-11-26 20:59:36
【问题描述】:

您好,我正在研究fabricjs 库并遇到了一个错误。

我正在绘制一组 Text 和 Rect 然后重新调整它的大小。 但是我看到@borders 组的大小随着 re-sizing 的增加而增加。 但我希望 strokeWidth 始终相同。

这是Fiddle!。

代码: `

var gCanvas = new fabric.Canvas('canvDraw');
 gCanvas.setWidth(500);
 gCanvas.setHeight(500);

var myEllipse = new fabric.Ellipse({
top: 250,
left: 100,
rx: 75,
ry: 50,
fill: '#999999',
stroke: '#000000',
strokeWidth: 2
});

var myText = new fabric.Text("Some text", {
top: 250,
left: 250,
});


// set up a listener for the event where the object has been modified
gCanvas.observe('object:modified', function (e) {
var objects = gCanvas.getObjects();
for (i in objects) {
    console.log(objects[i]);
    objects[i].strokeWidth = 2;
}
}); 
var group = new fabric.Group([ myEllipse, myText ], {borderColor: 'black', cornerColor: 'green'});
gCanvas.add(group);`

【问题讨论】:

    标签: javascript html5-canvas fabricjs


    【解决方案1】:

    Se 更新了小提琴 http://jsfiddle.net/6CDFr/264/ 用于动态笔画宽度变化。

    gCanvas.observe('object:modified', function (e) {
    var myObject = e.target;
    
    if (!myObject._objects) {
      return;
    }
    for (i in myObject._objects) {
        objects[i].strokeWidth = 2 / Math.sqrt(myObject.scaleX * myObject.scaleY);
    }
    });
    

    小心我删除了几个canvas.add(); 你不应该将对象同时添加到画布和组中。

    还保留 TEXT 尺寸:

    gCanvas.observe('object:added', function (e) {
        if (e.target.type === 'text' || e.target.type === 'i-text') {
            e.target.originalFontsize = e.target.fontSize;
        }
    });
    gCanvas.observe('object:modified', function (e) {
    var myObject = e.target;
    
    if (!myObject._objects) {
      return;
    }
    for (i in myObject._objects) {
        var obj = myObject._objects[i];
        var scaleFactor = Math.sqrt(myObject.scaleX * myObject.scaleY);
        obj.strokeWidth = 2 / scaleFactor;
        if (obj.type === 'text' || obj.type === 'i-text') {
            obj.fontSize = obj.originalFontsize / scaleFactor;
        }
    }
    });
    

    查看更新的小提琴http://jsfiddle.net/6CDFr/269/

    【讨论】:

    • 感谢您的回答。但是有一个问题,我们可以不同样保持文本的大小。我不希望文本的大小在调整大小时增加/减少
    • 我也在答案中添加了这个,但是我一周前做过类似的问题,请更好地搜索。
    • 如果解决了请采纳答案,方便其他用户找到。更改 te tile 以反映在缩放时也维护 fontSize 和组边框。
    • 抱歉回复晚了,你回复的时候已经很晚了。现在我正在使用您的代码,但是如果我现在调整大小,文本就会消失,如果我错了,请纠正我。谢谢
    • 我已经更新了你的答案。请看一看 。为了不打扰您的代码,我维护了一个单独的循环。 jsfiddle.net/Subhasish2015/6CDFr/267
    猜你喜欢
    • 2016-01-29
    • 2021-09-04
    • 1970-01-01
    • 2016-03-19
    • 2011-08-08
    • 2015-01-17
    • 2020-01-06
    • 2016-12-17
    • 2014-01-28
    相关资源
    最近更新 更多