Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
空白画布HTML、JavaScript_Javascript_Html_Canvas - Fatal编程技术网

空白画布HTML、JavaScript

空白画布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

为什么我会得到空白画布? 当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.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%确定,可能取决于使用情况。