Непреклонные изображения
Доброго времени суток форумчане. Вопрос состоит в следующем. Создается массив изображений, который мне необходимо пихнуть на страницу, но перед тем как пихнуть, надо забрать у них стартовые значения высоты и ширины. Все мои попытки увенчались провалом, ибо он выводит либо "" или же 0.
naturalHeight/naturalWidth, height/width, style.height/style/width - все, что знаю перепробовал :D Так вот, и кусочек кода, отвечающий за сие действо. var quantity = 15, images = []; imageDimensions = []; function fillArray() { for (var i = 1; i <= quantity; i++) { var Picture = document.createElement('img'); Picture.setAttribute('src', 'image/prod/' + i + '.jpg'); images.push(Picture); var startHeight = Picture.height; var startWidth = Picture.width; imageDimensions.push({width: startWidth, height: startHeight}); } } function initProd() { fillArray(); console.log(images); console.log(imageDimensions); } Помогите, кто чем может, а то уже вторую неделю ничего с этим поделать не могу :cray: . |
Bac9_AJlkaLLl,
Picture.onload => imageDimensions[i]({width: startWidth, height: startHeight}); |
Bac9_AJlkaLLl,
var quantity = n =15, images = [], imageDimensions = []; function fillArray() { for (var i = 1; i <= quantity; i++) { var Picture = new Image; images.push(Picture); Picture.onload = function(a) { return function() { imageDimensions[a]({ width: this.width, height: this.height }); if (!--n) initProd() } }(i); Picture.src = "image/prod/" + i + ".jpg" } } fillArray(); function initProd() { console.log(images); console.log(imageDimensions) }; |
Чуть подкоректировать заполнение второго массива и все работает. Ура! спасибо огромное.:dance:
Забыл совсем про замыкания, не любил их никогда :D В прежней версии, пытался через онлоэд, но к успеху не привело. |
рони,
Нашел такую ошибку, что он вываливает не по порядку. Нашел похожий пост, в котором ты же и говоришь, что это хром пытается все оптимизировать и дело в скорости обработки, что-то такое, точно не помню... так вот я теперь не совсем понимаю как исправить это. function fillArray() { for (var i = 1; i <= quantity; i++) { var Picture = new Image; images.push(Picture); Picture.onload = (function (count) { return function () { console.log(count); imageDimensions.push({ width: this.naturalWidth, height: this.naturalHeight }); } })(i); Picture.src = "image/prod/" + i + ".jpg"; } } fillArray(); |
Bac9_AJlkaLLl,
function fillArray() { for (var i = 1; i <= quantity; i++) { var Picture = new Image; images.push(Picture); Picture.onload = (function (count) { return function () { console.log(count); imageDimensions[count]({ width: this.naturalWidth, height: this.naturalHeight }); } })(i - 1); Picture.src = "image/prod/" + i + ".jpg"; } } fillArray(); |
Вложений: 1
Собственно вот, какие каунты он выводит в данном случае, в предыдущей было практически тоже самое.:(
|
Bac9_AJlkaLLl,
и какая проблема то? вам же написали решение ещё в 3 посте, нужно было только -1 добавить. var quantity = n =15, images = [], imageDimensions = []; function fillArray() { for (var i = 1; i <= quantity; i++) { var Picture = new Image; images.push(Picture); Picture.onload = function(a) { return function() { imageDimensions[a]({ width: this.naturalWidth, height: this.naturalHeight }); if (!--n) initProd() } }(i - 1); Picture.src = "image/prod/" + i + ".jpg" } } fillArray(); function initProd() { // тут делайте что хотите с готовыми массивами console.log(images); console.log(imageDimensions) }; |
Часовой пояс GMT +3, время: 10:51. |