空白画布HTML、JavaScript
为什么我会得到空白画布? 当e.target.result更改为web某处图像的正常url时(在img.src=e.target.result中),它工作得非常好。添加带有src=e.target.result的img标记也有效空白画布HTML、JavaScript,javascript,html,canvas,Javascript,Html,Canvas,为什么我会得到空白画布? 当e.target.result更改为web某处图像的正常url时(在img.src=e.target.result中),它工作得非常好。添加带有src=e.target.result的img标记也有效 function handleFileSelect(evt) { var files = evt.target.files; for (var i = 0, f; f = files[i]; i++) { if (!f.type.mat
function handleFileSelect(evt) {
var files = evt.target.files;
for (var i = 0, f; f = files[i]; i++) {
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
var span = document.createElement('span');
span.innerHTML = ['<canvas class="thumb" title="', escape(theFile.name), '" id="', escape(theFile.name), '"></canvas>'].join('');
document.getElementById('photo-list').insertBefore(span, null);
var ctx=document.getElementById(escape(theFile.name)).getContext("2d");
var img=document.createElement('img');
img.src = e.target.result;
ctx.drawImage(img,0,0);
};
})(f);
reader.readAsDataURL(f);
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
功能手柄文件选择(evt){
var files=evt.target.files;
for(var i=0,f;f=files[i];i++){
如果(!f.type.match('image.*')){
继续;
}
var reader=new FileReader();
reader.onload=(函数(文件){
返回函数(e){
var span=document.createElement('span');
span.innerHTML=['').join('');
document.getElementById('photo-list').insertBefore(span,null);
var ctx=document.getElementById(escape(theFile.name)).getContext(“2d”);
var img=document.createElement('img');
img.src=e.target.result;
ctx.drawImage(img,0,0);
};
})(f) );
reader.readAsDataURL(f);
}
}
document.getElementById('files').addEventListener('change',handleFileSelect,false);
在代码中执行的位置
ctx.drawImage(img,0,0);
映像尚未完成加载(它是客户端,但加载仍需要一些时间)。因此,将drawImage调用包装到
元素的加载处理程序中,如下所示:
img.onload = (function (ctx) {
return function () {
ctx.drawImage(this, 0, 0);
};
})(ctx);
在代码中执行
ctx.drawImage(img,0,0);
映像尚未完成加载(它是客户端,但加载仍需要一些时间)。因此,将drawImage调用包装到
元素的加载处理程序中,如下所示:
img.onload = (function (ctx) {
return function () {
ctx.drawImage(this, 0, 0);
};
})(ctx);
内回路fn。Unnecessary@RokoC.Buljan有多个ctx's maybe@RokoC.Buljan有一点-也许它总是正确的ctx,而不使用另一个生命,不是100%确定,可能取决于使用情况。内部返回fn。Unnecessary@RokoC.Buljan有多个ctx'sMaybe@RokoC.Buljan有一点-也许它总是正确的ctx,而不使用另一个IIFE,不是100%确定,可能取决于使用情况。