Свойства naturalHeight(Width) равны нулю
Вложений: 2
Доброго времени суток!
Я новичок, потому прошу сильно не ругать, если "дело было не в бобине":) Имеется вот такой код: var bgimg = new Image(); bgimg.src = 'img/'+picturesNames[currentPic]+'.jpg'; imgWidth = bgimg.naturalWidth; imgHeight = bgimg.naturalHeight; console.log(bgimg); console.log(imgWidth + 'x' + imgHeight); console.log(bgimg.naturalWidth + 'x' + bgimg.naturalHeight); После загрузки страницы в консоли наблюдается такая картина: https://javascript.ru/forum/attachme...d=152475765 3 При этом в самом объекте, если развернуть его свойства, naturalWidth и naturalHeight не нулевые: https://javascript.ru/forum/attachme...d=152475765 3 Если эту же страницу перезагрузить, то всё нормализуется. Если страницу не перезагружать, а загрузить другую страницу с другим picturesNames[currentPic], а потом снова перейти на предыдущую страницу, то она тоже сработает правильно. Бьюсь второй день, изобретать "костыли" и идти в обход не хочу, т.к. хочу понять, в чём причина ошибки. Буду признателен за помощь. P.S. Что-то не могу разобраться, как тут картинки правильно в текст вставлять, сорри. |
Потому что на тот момент картинка ещё не загрузилась (или не взялась из кеша).
var bgimg = new Image();
bgimg.onload = function() {
console.log(bgimg.naturalWidth + 'x' + bgimg.naturalHeight);
};
bgimg.src = 'img/'+picturesNames[currentPic]+'.jpg';
|
ruslan_mart, спасибо огромное, понял! Никак не могу привыкнуть к тому, что в JS код выполняется не "последовательно", как в "обычных" языках. Правда, нечто подобное имеет место быть и при низкоуровневом программировании всяких железок, когда нужно учитывать задержки распространения сигнала и т.п., но там просто ждёшь и нет никаких "onload".
Ещё раз спасибо! |
window.onload = function() {
// ваш код
};
пробовали? |
j0hnik,а причём тут window.onload? Да, у меня весь зависящий от загрузки страницы код в window.onload.
|
"Последовательно" тоже можно
// Это вспомогательная функция
// запускающая переданную в неё функцию
function $(generatorFunction) {
var iterator = generatorFunction(next);
iterator.next();
function next(value) {
iterator.next(value);
}
}
$(async function*(next) {
var bgimg = new Image();
bgimg.src = "https://placeimg.com/640/480/any";
yield bgimg.onload = next;
alert(bgimg.naturalWidth + '×' + bgimg.naturalHeight);
});
|
| Часовой пояс GMT +3, время: 23:49. |