Rect with stroke, the stroke line is mis-transformed when scaled

前端 未结 3 1283
慢半拍i
慢半拍i 2021-01-02 19:41

I have got a lot of helps from this site and contributors here, thanks. Now I have a question about the Rectangle in Fabric.js with stroke, as I used it as kind of placehold

3条回答
  •  再見小時候
    2021-01-02 20:21

    First of all you have miss-typed the name of the property in your fiddle : strokWidth - e is missing. But this is not the cause of the problem since the default value for the strokeWidth is 1.

    The scaled stroke issue is the expected behavior and what you ask to do is not. Anyway, before you check my code, read here and here and maybe some more here.

    Then try this code to help with your needs, this will work perfectly only if you keep the scale ratio of your rectangle as 1:1 (scaleX = scaleY).

    This is jsfiddle:

    var canvas = new fabric.Canvas("c1");
    
    var el = new fabric.Rect({
        originX: "left",
        originY: "top",
        left: 5,
        top: 5,
        stroke: "rgb(0,0,0)",
        strokeWidth: 1,
        fill: 'transparent',
        opacity: 1,
        width: 200,
        height: 200,
        cornerSize: 6
    });
    
    el.myCustomOptionKeepStrokeWidth = 1;
    canvas.on({
        'object:scaling': function(e) {
            var obj = e.target;
            if(obj.myCustomOptionKeepStrokeWidth){
                var newStrokeWidth = obj.myCustomOptionKeepStrokeWidth / ((obj.scaleX + obj.scaleY) / 2);
                obj.set('strokeWidth',newStrokeWidth);
            }
        }
    });
    
    canvas.add (el);
    canvas.renderAll ();
    

提交回复
热议问题