Как указать очерёдность событий не через setTimeout?
Здравствуйте.
Я получаю изображение, а затем пытаюсь получить его ширину:
$('.tech').append("<img src='/upload/" + data['name'] + "' class='" + data['id'] + " toimg'><p class='psize'></p></div>");
$('.psize').append($('.' + data['id']).get(0).naturalWidth);
Но по каким-то причинам я получаю ответ "0". Я так предполагаю, это связано с тем, что изображение ещё не успело создаться, а я уже пытаюсь получить его ширину. Если я установлю setTimeout, то всё будет работать, но это не самый красивый метод, так как за отведённое мной время изображение может не успеть подгрузиться и я опять получу "0". Опять же я теряю во времени, если изображение уже подгрузилось, а я жду непонятно чего. Подскажите, как указать очерёдность событий, чтобы в начале выполнился append в .tech, а затем append в .psize? |
new Promise((resolve, reject) => {
var img = new Image();
img.onload = () => resolve(img);
img.onerror = reject;
img.src - '/upload/' + data['name'];
}).then(
naturalWidth => {
$('.tech').append("<img src='/upload/" + data['name'] + "' class='" + data['id'] + " toimg'><p class='psize'></p></div>");
$('.psize').append(naturalWidth);
},
error => {
//картинка не загрузилась
}
)
|
Aetae,
строка 7 разве не так должна быть ({naturalWidth })=> { или скобки лишние? |
Не, парни, не пашет.
http://jsfiddle.net/89xc5zt4/ Я сделал вот таким образом:
$('.tech').append("<div class='imgwrap'><img src='/upload/" + data['name'] + "' class='" + data['id'] + " toimg'></div><p class='psize'></p>");
$('.' + data['id']).on('load', function(){
$('.psize').append($(this).get(0).naturalWidth);
});
|
рони, не, в 3 должно быть img.naturalWidth.
Писал на коленке не глядя, извиняюсь. :) |
| Часовой пояс GMT +3, время: 01:50. |