Ich habe ein kleines Problem mit einer Schleife. Ich baue ein kleines Werkzeug, wo ein Benutzer 12 Bilder hochladen muss. Die Bilder werden in Rechtecken zugeschnitten und auf Schaltflächen platziert. Ich bin fast fertig, aber irgendwie funktioniert die Schleife nicht gut. Alle Bilder landen auf dem letzten Knopf. Vielleicht stimmt hier was nicht?Schleife: Bilder landen nur auf dem letzten Feld
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]);
}
Hier ist auch ein Link auf die JSFiddle. Schätzen Sie Ihre Hilfe, da ich nicht genau weiß, wie reader.readAsDataURL($('.multiupload')[0].files[i]);
und target.result
Mögliche Duplikat [JavaScript-Verschluss Innenschleifen - einfaches praktisches Beispiel] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) – Teemu
Sie können‘ t j in onload verwenden. Weil onload aufgerufen wird, nachdem die Schleife beendet wurde (wie es Callback ist - Async-Funktion). Jeder Onload-Funktionsaufruf hat j = 12. onload = (Funktion (j) {return function() {... Ihr Code}}) (j) kann Ihnen helfen. Vielleicht wird jemand meine Gedanken beenden.h –
In der ersten Zeile der Onload-Funktion hinzufügen 'var img = this;' wird das richtige Bild bekommen. Die letzte Zeile der Onload-Funktion funktioniert jedoch nicht wie oben erwähnt. J hat den falschen Wert. – Blindman67