简体   繁体   English

fabric.js画布中的图层系统

[英]layer system in fabric.js canvas

I am designing business card designer application with fabric.js canvas in this application i need a system for managing objects z-index and for that i created two buttons for sending selected object in back and front its working fine but in all my designs i have a background image on which all text and objects placed when i send a object back it send back under that BG image how can stop that i mean i want that BG image to always in last position 我在这个应用程序中使用fabric.js canvas设计名片设计器应用程序,我需要一个用于管理对象z-index的系统,为此,我创建了两个按钮,用于向后和向前发送所选对象,可以正常工作,但是在我所有的设计中背景图像,当我发回一个对象时,所有文本和对象都放置在该背景图像上,它在该BG图像下发回,这是如何停止的,我的意思是我希望该BG图像始终位于最后一个位置

preview of application 申请预览

Code i am using now to send object in front and back 我现在使用的代码前后发送对象

 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> 

Set your background using canvas.setBackgroundImage(obj) , then it will stay ion back all the time. 使用canvas.setBackgroundImage(obj)设置背景,然后它将一直保持在后台。

First Option 第一选择

Use canvas.setBackgroundImage(obj) 使用canvas.setBackgroundImage(obj)

Second Option 第二选择

If you don't want to set backgroundImage 如果您不想设置backgroundImage

You can do it after you send back your selected object, you need to again send your BG object to back. 您可以在将选定的对象发送回去之后执行此操作,您需要再次将BG对象发送回去。

Try this. 尝试这个。

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