Я добавляю динамически созданный элемент изображения в документ.Javascript appendChild onload event
var img = new Image();
img.src = 'test.jpg',
img.onload = function() {
var addedImg = container.appendChild(img);
console.log(img.width); //old width.
}
Проблема здесь заключается в том, если я размеры изображения сразу после container.appendChild(img)
он возвращает размеры исходного файла, поскольку AppendChild еще не закончена (не перекрасили?) И размеры не пересчитывается.
var addedImg = container.appendChild(img);
console.log(img.width) //returns original width of the image
Итак, мне интересно, если это возможно, чтобы поймать событие нагрузки для AppendChild?
Я знаю, что можно использовать setTimeout/setInterval
, но я думаю, должно быть более элегантное решение.
var addedImg = container.appendChild(img);
setTimeout(function() {
console.log(img.width); //return correct resolution after image dimensions were recalculated
}, 1000);
Проблема с SetTimeout/setInterval является тот факт, я не знаю, когда элемент окончательно добавляется и перекрасили. Я должен запустить его в цикле.
Я пытался прослушать DOMNodeInsertedIntoDocument
и DOMNodeInserted
событий, однако это не сработало.
img.addEventListener("DOMNodeInserted", onImageInserted, false);
img.addEventListener("DOMNodeInsertedIntoDocument", onImageInserted, false);
function onImageInserted(event) {
console.log(img.width); //still wrong width
}
Однако, похоже, что сразу после запуска appendChild.
Вот скрипка, так что вы можете увидеть, что я говорю о: http://jsfiddle.net/0zyybmf2/
Примечания: пожалуйста, не советуете проверить ширину родительского контейнера. Мне нужно взять ширину изображения. Любая помощь с этим была бы оценена очень.
Изображения имеют 'load' событие. – elclanrs
ex: 'img.onload = function() {alert (this.naturalWidth)}' – dandavis
Это не то, о чем я говорю. Этот код уже находится внутри img.load. Речь идет об улавливании события перерисовки. – Sray