我正在使用html5来创建拖放图片上传功能。这在firefox中对我很有用,但在chrome中,图像onload事件仅在第一次触发时触发。如果我只在第一个作品中拖动多个图像,如果我在其中拖动第二个图像失败。我相信问题出在图像上。
这是我的代码的工作方式我删除了不相关的部分:
var img = document.createElement("img");
var reader = new FileReader();
var canvas = document.createElement("canvas");
var canvasData;
var ctx = canvas.getContext("2d");
var myFiles;
var i = 0;
reader.onload = (function (aImg)
{
return function (e)
{
aImg.src = e.target.result;
};
})(img);
img.onload = function (){
//resizes image
//draws it to the canvas
//posts to server
i++;
if(i < myFiles.length){
processNext(i);
}
}
function processNext(filei) {
var file = myFiles[filei];
img.file = file;
reader.readAsDataURL(file);
}
i = 0;
myFiles = files;
processNext(0);
有谁知道为什么这可以在firefox中运行而不是chrome?
答案 0 :(得分:7)
铬跟踪器的解释:
这不是错误。 WebKit更严格。您必须在替换之前实例化一个新的Image()对象,如下所示:
var photo = document.getElementById('image_id');
var img = new Image();
img.addEventListener('load', myFunction, false);
img.src = 'http://newimgsource.jpg';
photo.src = img.src;
来源:http://code.google.com/p/chromium/issues/detail?id=7731#c12
答案 1 :(得分:0)
这很奇怪,以上都不适合我。我将图像变量定义为local并将其更改为global并开始工作。这有意义吗?有人可以解释一下吗?
这对我没用:
function loadImage() {
var ImageToLoad = new Image();
imageToLoad.onload = function() {
console.log("finish loading");
};
imageToLoad.src = "myimage.png";
}
这确实有效:
var ImageToLoad = new Image();
function loadImage() {
imageToLoad.onload = function() {
console.log("finish loading");
};
imageToLoad.src = "myimage.png";
}