簡體   English   中英

fabric.js畫布中的圖層系統

[英]layer system in fabric.js canvas

我在這個應用程序中使用fabric.js canvas設計名片設計器應用程序,我需要一個用於管理對象z-index的系統,為此,我創建了兩個按鈕,用於向后和向前發送所選對象,可以正常工作,但是在我所有的設計中背景圖像,當我發回一個對象時,所有文本和對象都放置在該背景圖像上,它在該BG圖像下發回,這是如何停止的,我的意思是我希望該BG圖像始終位於最后一個位置

申請預覽

我現在使用的代碼前后發送對象

 var selectedObject;
      canvas.on('object:selected', function(event) {
        selectedObject = event.target;
      });

      var sendSelectedObjectBack = function() {
        canvas.sendToBack(selectedObject);
      }

      var sendSelectedObjectToFront = function() {
        canvas.bringToFront(selectedObject);
      }

 var canvas = new fabric.Canvas('c'); fabric.Image.fromURL('https://images2.alphacoders.com/147/147320.png', function(img) { var oImg = img.set({ left: 0, top: 0, angle: 00, width: canvas.width, height: canvas.height }); canvas.setBackgroundImage(oImg).renderAll(); }); canvas.add(new fabric.Circle({ left: 50, top: 50, radius: 50, stroke: 'red', fill: 'yellow' })) canvas.add(new fabric.Rect({ left: 50, top: 50, height: 150, width:150, stroke: 'red', fill: 'green' })) var sendSelectedObjectBack = function() { selectedObject = canvas.getActiveObject(); if(selectedObject) canvas.sendToBack(selectedObject); canvas.deactivateAll(); canvas.renderAll(); } var sendSelectedObjectToFront = function() { selectedObject = canvas.getActiveObject(); if(selectedObject) canvas.bringToFront(selectedObject); canvas.deactivateAll(); canvas.renderAll(); } 
 canvas{ border:2px dotted blue; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.16/fabric.min.js"></script> <button onclick='sendSelectedObjectBack();'>Send back</button> <button onclick='sendSelectedObjectToFront();'>Bring Front</button> <canvas id='c' width='400' height='400'></canvas> 

使用canvas.setBackgroundImage(obj)設置背景,然后它將一直保持在后台。

第一選擇

使用canvas.setBackgroundImage(obj)

第二選擇

如果您不想設置backgroundImage

您可以在將選定的對象發送回去之后執行此操作,您需要再次將BG對象發送回去。

嘗試這個。

var sendSelectedObjectBack = function() {
    canvas.sendToBack(selectedObject); //this will send selected object to back.
    // Now loop through all your obj
    canvas.forEachObject(function (obj) {
    // get your background with id or any other property
        if (obj && obj.id.indexOf('BG_') > -1) {
            canvas.bringToBack(obj, true); // this will send your BG always at back
        }
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM