我有一個循環的小問題。我正在構建一個小工具,用戶必須上傳12個圖像。圖像被裁剪成矩形並放置在按鈕上。我差不多已經準備好了,但不知怎的,循環不能正常工作。所有圖像都落在最後一個按鈕上。這裏的循環可能有問題嗎?循環:圖像僅落在最後一個字段
JS/JQuery的:
for (var i = 0; i < 12; i++) {
var j=i+1;
var reader = new FileReader();
reader.onload = function (e) {
var img = new Image();
img.src = e.target.result;
img.onload = function() {
var getimage= '#getimage'+j;
// CREATE A CANVAS ELEMENT AND ASSIGN THE IMAGES TO IT.
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, canvas.width, canvas.height)
var posh, posw;
var factheight=img.height;
var factwidth=img.width;
if(factwidth<factheight){
canvas.width = img.width;
canvas.height= img.width;
posh=(img.height-img.width)/2;
posw=0;
}
else if(factheight<factwidth){
canvas.height = img.height;
canvas.width = img.height;
posh=0;
posw=(img.width-img.height)/2;
}
else{
canvas.width = img.width;
canvas.height= img.height;
posh=0;
posw=0;
}
ctx.drawImage(img, posw, posh, canvas.width, canvas.height, 0, 0, canvas.width, canvas.height);
var cropped=canvas.toDataURL("image/png");
$(getimage).attr("src",cropped); // SHOW THE IMAGES OF THE BROWSER.
}
}
reader.readAsDataURL($('.multiupload')[0].files[i]);
}
這裏也是到JSFiddle的鏈接。感謝您的幫助,因爲我不知道究竟是如何reader.readAsDataURL($('.multiupload')[0].files[i]);
和target.result
工作
的可能的複製[JavaScript的閉包內環路 - 簡單實用的例子(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Teemu
你可以用」在內部使用j。因爲onload將在循環結束後被調用(因爲它是回調 - 異步函數)。每個onload函數調用將有j = 12。 onload =(function(j){return function(){...您的代碼}})(j)可以幫助您。 也許有人會完成我的想法..h –
在onload函數的第一行添加'var img = this;'會得到正確的圖像。但是onload函數的最後一行將不會像上面提到的那樣工作j將會有錯誤的值。 – Blindman67