简体   繁体   English

有没有一种方法可以分别删除画布对象(一个一个)fabric js

[英]Is there a way to delete canvas objects separately(one by one) fabric js

I have add multiple objects(images) to the canvas and i only need to delete some selected object with a button click.Is there a way to do that. 我在画布上添加了多个对象(图像),我只需要单击一下按钮即可删除一些选定的对象。有没有办法做到这一点? And also i need maintain a separate id for each objects which are added to the canvas. 而且我还需要为添加到画布上的每个对象维护一个单独的ID。 Is there a way to do this in fabric js. 有没有办法在fabric js中做到这一点。 PS: I want to maintain a list. PS:我想保留一份清单。 in that list i want to added object details which are inserted to the canvas. 在该列表中,我想添加插入画布的对象详细信息。

 function initCanvas() { $('.canvas-container').each(function(index) { var canvasContainer = $(this)[0]; var canvasObject = $("canvas", this)[0]; var imageOffsetX, imageOffsetY; function handleDragStart(e) { [].forEach.call(images, function(img) { img.classList.remove('img_dragging'); }); this.classList.add('img_dragging'); var imageOffset = $(this).offset(); imageOffsetX = e.clientX - imageOffset.left; imageOffsetY = e.clientY - imageOffset.top; } function handleDragOver(e) { if (e.preventDefault) { e.preventDefault(); } e.dataTransfer.dropEffect = 'copy'; return false; } function handleDragEnter(e) { this.classList.add('over'); } function handleDragLeave(e) { this.classList.remove('over'); } function handleDrop(e) { e = e || window.event; if (e.preventDefault) { e.preventDefault(); } if (e.stopPropagation) { e.stopPropagation(); } var img = document.querySelector('.furniture img.img_dragging'); //console.log('event: ', e); var offset = $(canvasObject).offset(); var y = e.clientY - (offset.top + imageOffsetY); var x = e.clientX - (offset.left + imageOffsetX); var newImage = new fabric.Image(img, { width: img.width, height: img.height, left: x, top: y, id: img.id }); canvas.add(newImage); return false; } function handleDragEnd(e) { [].forEach.call(images, function(img) { img.classList.remove('img_dragging'); }); } var images = document.querySelectorAll('.furniture img'); [].forEach.call(images, function(img) { img.addEventListener('dragstart', handleDragStart, false); img.addEventListener('dragend', handleDragEnd, false); }); canvasContainer.addEventListener('dragenter', handleDragEnter, false); canvasContainer.addEventListener('dragover', handleDragOver, false); canvasContainer.addEventListener('dragleave', handleDragLeave, false); canvasContainer.addEventListener('drop', handleDrop, false); }); } initCanvas(); var canvas = new fabric.Canvas('canvas1', { selection: false }); function deleteobject(){ } 
 canvas{ border:1px solid #000; } 
 <div class="fullpage"> <div class="section"> <div class="canvas-container"> <canvas id="canvas1" style="border: 1px solid;width: 500px;height: 500px"></canvas> </div> <div class="furniture" style="padding: 20px;border: 1px solid;width: 460px"> <h3>Drag the image to canvas</h3> <img id="pic1" draggable="true" src="https://www.mve.com/media/Move_logo_-01.png" width="60"> <img id="pic2" draggable="true" src="https://young.scot/media/8787/second-chances-logo-802x644.png" width="60"> </div> </div> <button onclick="deleteobject()">Delete</button> </div> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.6/fabric.min.js'></script> 

Use canvas.remove(selectedObject) to remove an object. 使用canvas.remove(selectedObject)删除对象。

DEMO DEMO

 function initCanvas() { $('.canvas-container').each(function(index) { var canvasContainer = $(this)[0]; var canvasObject = $("canvas", this)[0]; var imageOffsetX, imageOffsetY; function handleDragStart(e) { [].forEach.call(images, function(img) { img.classList.remove('img_dragging'); }); this.classList.add('img_dragging'); var imageOffset = $(this).offset(); imageOffsetX = e.clientX - imageOffset.left; imageOffsetY = e.clientY - imageOffset.top; } function handleDragOver(e) { if (e.preventDefault) { e.preventDefault(); } e.dataTransfer.dropEffect = 'copy'; return false; } function handleDragEnter(e) { this.classList.add('over'); } function handleDragLeave(e) { this.classList.remove('over'); } function handleDrop(e) { e = e || window.event; if (e.preventDefault) { e.preventDefault(); } if (e.stopPropagation) { e.stopPropagation(); } var img = document.querySelector('.furniture img.img_dragging'); //console.log('event: ', e); var offset = $(canvasObject).offset(); var y = e.clientY - (offset.top + imageOffsetY); var x = e.clientX - (offset.left + imageOffsetX); var newImage = new fabric.Image(img, { width: img.width, height: img.height, left: x, top: y, id: img.id }); canvas.add(newImage); return false; } function handleDragEnd(e) { [].forEach.call(images, function(img) { img.classList.remove('img_dragging'); }); } var images = document.querySelectorAll('.furniture img'); [].forEach.call(images, function(img) { img.addEventListener('dragstart', handleDragStart, false); img.addEventListener('dragend', handleDragEnd, false); }); canvasContainer.addEventListener('dragenter', handleDragEnter, false); canvasContainer.addEventListener('dragover', handleDragOver, false); canvasContainer.addEventListener('dragleave', handleDragLeave, false); canvasContainer.addEventListener('drop', handleDrop, false); }); } initCanvas(); var canvas = new fabric.Canvas('canvas1', { selection: false }); function deleteobject(){ var selectedObject = canvas.getActiveObject(); selectedObject && canvas.remove(selectedObject); } 
 canvas{ border:1px solid #000; } 
 <div class="fullpage"> <div class="section"> <div class="canvas-container"> <canvas id="canvas1" style="border: 1px solid;width: 500px;height: 500px"></canvas> </div> <div class="furniture" style="padding: 20px;border: 1px solid;width: 460px"> <h3>Drag the image to canvas</h3> <img id="pic1" draggable="true" src="https://www.mve.com/media/Move_logo_-01.png" width="60"> <img id="pic2" draggable="true" src="https://young.scot/media/8787/second-chances-logo-802x644.png" width="60"> </div> </div> <button onclick="deleteobject()">Delete</button> </div> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.6/fabric.min.js'></script> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM