边界框外观 - 使用fabricjs控制自定义

Lin*_*ndy 6 javascript overriding fabricjs

我想知道有没有办法更改边界框图标,我在fabric.js中读取源代码,它生成边框的方框,但我想将其更改为圆形或更改为我的自定义外观.你能告诉我吗?

And*_*zzi 9

自定义控件的最快方法是编写自己的_drawControl函数并使其与fabricjs标准兼容以覆盖它.请记住,对于每个渲染,此函数被调用9次,因此请尽量使用代码和绘图.此外,如果您修改上下文(ctx),请记住使用.save并且.restore不要弄乱渲染管道.

FabricJs将调用该函数topleft准备好一个矩形,因此角落将位于top + size/2left + size/2,大小为this.cornerSize

function newControls(control, ctx, methodName, left, top) {
  if (!this.isControlVisible(control)) {
        return;
      }
      var size = this.cornerSize;
      isVML() || this.transparentCorners || ctx.clearRect(left, top, size, size);
      ctx.arc(left + size/2, top + size/2, size/2, 0, 2 * Math.PI, false);
      ctx.stroke();
}

fabric.Object.prototype._drawControl = newControls;
Run Code Online (Sandbox Code Playgroud)

function newControls(control, ctx, methodName, left, top) {
  if (!this.isControlVisible(control)) {
        return;
      }
      var size = this.cornerSize;
      this.transparentCorners || ctx.clearRect(left, top, size, size);
      ctx.beginPath();
      ctx.arc(left + size/2, top + size/2, size/2, 0, 2 * Math.PI, false);
      ctx.stroke();
}

fabric.Object.prototype._drawControl = newControls;
fabric.Object.prototype.cornerSize = 15;
var canvas = new fabric.Canvas('c');


canvas.add(new fabric.Rect({width:100, height:100, top:50, left:50}));
canvas.setActiveObject(canvas.getObjects()[0]);
Run Code Online (Sandbox Code Playgroud)
<script type ="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.5.0/fabric.min.js"></script>
<canvas id="c" width="400" height="400" style="border:1px solid #ccc"></canvas>
Run Code Online (Sandbox Code Playgroud)


ptC*_*der 4

检查这些示例:

http://fabricjs.com/customization/

示例2:

var canvas = new fabric.Canvas('c3');
  canvas.add(new fabric.Circle({ radius: 30, fill: '#f55', top: 100, left: 100 }));

  canvas.item(0).set({
    borderColor: 'red',
    cornerColor: 'green',
    cornerSize: 6,
    transparentCorners: false
  });
  canvas.setActiveObject(canvas.item(0));
Run Code Online (Sandbox Code Playgroud)

  • 不,目前没有内置支持更改对象控件的形状。你也许可以破解上面的一些东西。 (2认同)