javascript - 循环: images land on the last field only

标签 javascript jquery loops canvas

我在循环方面遇到了一些问题。我正在构建一个小工具,用户必须上传 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 作品

最佳答案

我猜测您的循环在任何图像完全加载之前就已完成,因此 j 在用于查找相关按钮之前将为 11。尝试改变

img.onload = function () { .... }

img.onload = myFunction(id)

然后将所有内容从内联函数移到其自己的带有输入参数的函数中。然后将 j 作为 id 参数传递。

关于javascript - 循环: images land on the last field only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41681140/

相关文章:

javascript - 如何从一个对象数组获取值到另一个对象数组

javascript - 回调中的 Socket.io-emit 给出 SyntaxError : Unexpected end of JSON input

r - 如何构建一个循环来导入多个数据帧并以相同的方式修改它们?

Java - 循环主参数

javascript - 在 IE8 上获取访问被拒绝错误

javascript - Django:如何保存mxGraph,以便当用户刷新图表时保持不变? (异步)

Javascript - 粘性按钮取决于标题宽度

jquery - removeClass 更改未反射(reflect)在页面上

javascript - 我的 AJAX 调用需要多长时间?

python - pandas python 中的嵌套循环