2014-11-08 1397 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