公式のAPIを介してFabric.jsキャンバスにオブジェクトをレイヤーする方法はありますか?今私が見つけた唯一の方法は、canvas._objectsを手動で繰り返し、特定の順序で描画されるように並べ替えることです。オブジェクトを(潜在的に)破壊しない、これを行うためのより良い方法はありますか?Fabric.jsにキャンバスオブジェクトを重ねる
18
A
答えて
36
[編集] 私は以下の情報を修正しました(私の悪い、元々はKineticJs APIを考えていました)。
FabricJSオブジェクトのz屈折率を変更するこれらのAPIのメソッドがあります。カバーの下
canvas.sendBackwards(myObject)
canvas.sendToBack(myObject)
canvas.bringForward(myObject)
canvas.bringToFront(myObject)
、FabricJsは(getObjectsからオブジェクトを除去することにより、z屈折率が変化する)配列およびスプライシングその後ろに希望の位置。それは交差するオブジェクトをチェックする素晴らしい最適化を持っています。
bringForward: function (object) {
var objects = this.getObjects(),
idx = objects.indexOf(object),
nextIntersectingIdx = idx;
// if object is not on top of stack (last item in an array)
if (idx !== objects.length-1) {
// traverse up the stack looking for the nearest intersecting object
for (var i = idx + 1, l = this._objects.length; i < l; ++i) {
var isIntersecting = object.intersectsWithObject(objects[i]) ||
object.isContainedWithinObject(this._objects[i]) ||
this._objects[i].isContainedWithinObject(object);
if (isIntersecting) {
nextIntersectingIdx = i;
break;
}
}
removeFromArray(objects, object);
objects.splice(nextIntersectingIdx, 0, object);
}
this.renderAll();
},
0
ステップ1:あなたは特定を設定したい場合は、その後、sendtoback
以下
1
ようsendtofront .... fabricjsのオプションを使用します。あなたはpreserveObjectStacking: true
ステップ2を使用することができます1つのオブジェクトを前後に動かすのではなく、すべてのオブジェクトの順序付けを行うために、前面/背面への呼び出し/送信の反復呼び出しが遅くなります。
あなたはこのユースケースをスピードアップするためのインスピレーションとしてbringToFront
のコードを使用することができます
そして、次の操作を行います。
比較は次のように、ソートを定義するfabric.Canvas.prototype.orderObjects = function(compare) {
this._objects.sort(compare);
this.renderAll();
}
:
function compare(x,y) {
return x.getWidth() * x.getHeight() < y.getWidth() * y.getHeight();
}
some_canvas.orderObjects(compare)
小さなオブジェクトを前面に持ってきたい場合。
関連する問題
- 1. Fabric.jsにキャンバスオブジェクトを自動スナップする方法はありますか
- 2. スプライトをスプライトシートに重ねる
- 3. 2つのキャンバスを重ねて重ねる+クリックイベント
- 4. 複数のboxplotを重ねて重ねる
- 5. 画像を重ねる
- 6. CSS:Unsliderの上にテキストを重ねる
- 7. iframe上にキャンバスを重ねる - HTML
- 8. アクティビティにマウスポインタを重ねる方法は?
- 9. DIVをFRAMESETに重ねる方法は?
- 10. キャンバスをキャンバスに重ねる方法は?
- 11. 画像上に要素を重ねる
- 12. データラベル重ね棒グラフ
- 13. divsを積み重ねて
- 14. イメージにテキストを重ねてサーバーにアップロード
- 15. divを縦にブートストラップで積み重ね
- 16. スレッドスコープ用にカイロを積み重ねて
- 17. HTML5キャンバスオブジェクト指向
- 18. WPFでTextBlockコントロールを積み重ねる
- 19. テキストで画像を重ねる方法
- 20. イメージを別のイメージと重ねる
- 21. プリズム:リージョンのコントロールを積み重ねる?
- 22. フレックスアイテムを積み重ねてスタックする
- 23. 要素を重ねる方法
- 24. Java Netbeans:パネルを重ねる方法は?
- 25. TensorFlow:whileループでテンソルを積み重ねる
- 26. データフレーム列を積み重ねる(パンダ)
- 27. カルーセルのブートストラップナビバーを重ねる方法は?
- 28. 比例積み重ね棒を作る
- 29. ZedGraph積み重ねバーが
- 30. フロック積み重ね棒
ありがとうございました!これは私に多くの問題を救う。 – Zwade
fabricjsは組み込みのオブジェクトスタックインデックスシステムを持っています...次に、 'var idx = some_object.get_zIndex()'のような何かをすることができます – dsdsdsdsd
Zインデックスを取得できます:canvas.getObjects()。indexOf(some_object) 。スタック順序を変更するコマンドは、some_object.sendBackwards()、some_object.sendToBack()、some_object.bringForward()、およびsome_object.bringToFront()の4つです。 – markE