7

バウンディング ボックスのアイコンを変更する方法があることを知りたいです。fabric.js のソース コードを読み、バウンディング ボックスの正方形のボックスを生成しますが、それを円に変更するか、カスタムの外観に変更したいと考えています。教えていただけますか?

4

3 に答える 3

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;

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]);
<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>

于 2016-01-27T09:06:33.087 に答える
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));
于 2013-04-16T02:34:01.393 に答える