我正在将动态创建的图像元素附加到文档中。
这里的问题在于,如果我在
setTimeout/setInterval的问题在于我不知道元素何时最终被附加和重绘。我必须在循环中运行它。
我试图监听DOMNodeInsertedIntoDocument和DOMNodeInserted事件,但是它们都无法正常工作。
然而,它似乎是在appendChild被触发后立即运行的。
这里是fiddle链接,您可以看到我所说的: http://jsfiddle.net/0zyybmf2/ 注意:请不要建议检查父容器的宽度。我需要获取图像的宽度。 非常感谢您提供的任何帮助。
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被触发后立即运行的。
这里是fiddle链接,您可以看到我所说的: http://jsfiddle.net/0zyybmf2/ 注意:请不要建议检查父容器的宽度。我需要获取图像的宽度。 非常感谢您提供的任何帮助。
setTimeout(fn..., 0)
是相同的。 - Hacketo