2014-11-08 1398 views
1

我對canvas和Fabric.js非常陌生。我遵循一些教程,現在可以將圖像添加到畫布。但不知道如何刪除它。通過點擊一個按鈕如何從Fabric.js畫布中使用按鈕刪除圖像

HTML

<div id="container"> 
    <input type="file" id="imageLoader" name="imageLoader" /> 
    <input type="button" id="imageRemove" name="imageRemove" /> 
    <canvas id="canvas" width="400" height="400" style="width:400px;height:400px" ></canvas> 

JS

var canvas = new fabric.Canvas('canvas', { 
    backgroundColor: 'rgb(240,240,240)' 
}); 

var imageLoader = document.getElementById('imageLoader'); 
imageLoader.addEventListener('change', handleImage, false); 

function handleImage(e) { 
    var reader = new FileReader(); 
    reader.onload = function (event) { 
    var img = new Image(); 
    img.onload = function() { 
     var imgInstance = new fabric.Image(img, { 
      scaleX: 1, 
      scaleY: 1 
     }) 
     canvas.add(imgInstance); 
    } 
    img.src = event.target.result; 
} 
reader.readAsDataURL(e.target.files[0]); 
} 

var imageRemove = document.getElementById('imageRemove'); 
imageLoader.addEventListener('change', handleRemove, false); 

function handleRemove(e) { 
    canvas.remove(canvas.getActiveObject()); 
} 

編輯:

這裏是Jsfiddle

+0

你能做出快速的小提琴? – Amy 2014-11-08 09:42:05

+0

完成!在上面擺弄。 @Amy – Expl0de 2014-11-08 09:49:29

+0

關於刪除按鈕上的點擊事件不起作用 – Amy 2014-11-08 09:57:27

回答

3

您可以使用clear()用於清除畫布對象並使用renderAll()重繪給定的畫布。

試試這個代碼:

DEMO

HTML:

<div id="container"> 
    <input type="file" id="imageLoader" name="imageLoader" /> 
    Remove:<input type="button" value="remove" id="imageRemove" name="imageRemove" onClick="handleRemove()"/> 
    <canvas id="canvas" width="400" height="400" style="width:400px;height:400px" ></canvas> 

JS代碼:

var canvas = new fabric.Canvas('canvas', { 
    backgroundColor: 'rgb(240,240,240)' 
}); 

var imageLoader = document.getElementById('imageLoader'); 
imageLoader.addEventListener('change', handleImage, false); 

function handleImage(e) { 
    var reader = new FileReader(); 
    reader.onload = function (event) { 
    var img = new Image(); 
    img.onload = function() { 
     var imgInstance = new fabric.Image(img, { 
      scaleX: 1, 
      scaleY: 1 
     }) 
     canvas.add(imgInstance); 
    } 
    img.src = event.target.result; 
} 
reader.readAsDataURL(e.target.files[0]); 
} 

//var imageRemove = document.getElementById('imageRemove'); 
//imageLoader.addEventListener('change', handleRemove, true); 

function handleRemove() { 
canvas.clear().renderAll(); // Here is your clear canvas function 
} 
+1

這將清除整個畫布不僅僅是圖像,對吧?如果有圖像和文字,但是我們只想刪除文字而不是圖像?此外清除文本不是通過選擇文本,而是通過複選框操作。如果點擊複選框,則顯示文字,否則刪除文字。 – Tushant 2017-06-02 01:43:16