Непреклонные изображения
Доброго времени суток форумчане. Вопрос состоит в следующем. Создается массив изображений, который мне необходимо пихнуть на страницу, но перед тем как пихнуть, надо забрать у них стартовые значения высоты и ширины. Все мои попытки увенчались провалом, ибо он выводит либо "" или же 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, время: 16:44. |