FabricJS FlipX 对象

Gol*_*naz 3 javascript jquery canvas fabricjs

当在 FabricJS 画布上单击对象本身时,我无法水平翻转或镜像对象。

我接近了,但是当它被调整大小时它也在镜像对象,这是我不想要的。

我想我需要在第一次单击时将“flipX:true”属性添加到对象,然后在下次单击时删除该属性,依此类推,每次单击。或者也许这太复杂了,使用我不知道的flipX函数可以更容易地完成。

我确实找到了一个翻转对象的小提琴,但它是单击按钮而不是对象本身。

我正在努力解决这个问题:\

我的小提琴

HTML:

<canvas id="canvas" width="400" height="300"></canvas>
Run Code Online (Sandbox Code Playgroud)

JS:

var canvas = this.__canvas = new fabric.Canvas('canvas');

canvas.on('object:selected', function() {
  toggle('flipX');
});

// create a rectangle
var rect = new fabric.Rect({
  left: 50,
  top: 50,
  width: 100,
  height: 50,
  angle: 20,
  fill: 'red'
});
canvas.add(rect);
canvas.renderAll();
Run Code Online (Sandbox Code Playgroud)

ɢʀᴜ*_*ᴜɴᴛ 7

您可以通过以下方式完成...

var canvas = this.__canvas = new fabric.Canvas('canvas');

// mouse event
canvas.on('mouse:down', function(e) {
    if (e.target) {
        if (!e.target.__corner) {
            e.target.toggle('flipX');
            canvas.renderAll();
        }
        e.target.__corner = null;
    }
});

// create a rectangle
var rect = new fabric.Rect({
    left: 50,
    top: 50,
    width: 100,
    height: 50,
    angle: 20,
});

// set gradient (for demonstration)
rect.setGradient('fill', {
    type: 'linear',
    x1: -rect.width / 2,
    y1: 0,
    x2: rect.width / 2,
    y2: 0,
    colorStops: {
        0: '#ffe47b',
        1: 'rgb(111,154,211)'
    }
});

canvas.add(rect);
rect.set('flipX', true);
canvas.renderAll();
Run Code Online (Sandbox Code Playgroud)
body{margin:10px 0 0 0;overflow:hidden}canvas{border:1px solid #ccc}
Run Code Online (Sandbox Code Playgroud)
<script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js"></script>
<canvas id="canvas" width="208" height="208"></canvas>
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,代码片段不起作用,但我在其他地方测试了代码,这正是我想要实现的目标:) 谢谢!它的工作方式与我的预期不同,如果没有渐变,我将无法看到翻转。我认为添加一个角度就足够了,天使会反转,因此显示翻转。也许这就是为什么我发现很难开始工作,因为我的演示还不够。 (2认同)