我正在尝试设置fabric.js画布,以便用户可以将图像文件从其系统拖放到画布上。在寻找一种方法时,我发现了这支笔,它可以正常工作,但是我也在使用jQuery,我想在文档的开头创建主要的变量/函数,并在以后根据需要调用它们上。
当我重新组织代码以匹配我的设置时,放置功能将停止工作。这是一支笔(或小提琴,如果您愿意的话),它模仿了我要使用的设置。
这是我基于此的笔的放置功能:
var canvas_container = document.getElementById('canvas-container');
var canvas = new fabric.Canvas('c');
var ctx = canvas.getContext('2d');
canvas_container.addEventListener('drop', function (e) {
console.log("DROP");
e = e || window.event;
if (e.preventDefault) {
e.preventDefault();
}
var dt = e.dataTransfer;
var files = dt.files;
for (var i=0; i<files.length; i++) {
var file = files[i];
var reader = new FileReader();
//attach event handlers here...
reader.onload = function (e) {
var img = new Image();
img.src = e.target.result;
var imgInstance = new fabric.Image(img, {
left: 100,
top: 100,
});
canvas.add(imgInstance);
}
reader.readAsDataURL(file);
}
return false;
});
我想要使用的设置:
var $main = $('#content'),
canvas = new fabric.Canvas('canvas', {
width: 400,
height: 550
}),
dropImage = function (e) {
var dt = e.originalEvent.dataTransfer,
files = dt.files;
e = e || window.event;
e.preventDefault();
e.stopPropagation();
console.log("Drop started");
$('.refs').removeClass('highlight');
canvas.remove(introTxt);
//Loop through files
for (var i=0; i<files.length; i++) {
var file = files[i],
reader = new FileReader();
reader.onload = loadReader(e);
reader.readAsDataURL(file);
}
function loadReader(e) {
var img = new Image();
img.src = e.target.result;
var imgInstance = new fabric.Image(img, {
left: 100,
top: 100
});
canvas.add(imgInstance);
console.log('Images found');
}
console.log('Drop done');
};
$main.on('drop', dropImage);
控制台上将记录“已完成”文本,但画布上实际上未显示任何图像。我完全为为什么这不起作用而感到困惑。
此外,这将是Photoshop扩展的一部分,而Adobe扩展可在Chromium上运行。因此,这仅需要在Chrome中运行。
在您的放置处理程序中,您需要执行
reader.onload = loadReader;
并在图像onload事件上将图像添加到画布
function loadReader(event) {
var img = new Image();
img.src = event.target.result;
img.onload = function(){
var imgInstance = new fabric.Image(img, {
left: 100,
top: 100
});
canvas.add(imgInstance);
}
}
这是更新的jsfiddle
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句