【发布时间】:2015-02-23 08:28:33
【问题描述】:
我将动态创建的图像元素附加到文档中。
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事件。 -
例如:
img.onload=function(){alert(this.naturalWidth)} -
我说的不是这个。此代码已在 img.load 中。这是关于捕捉重绘事件。
-
appendChild has not finished yet,什么? -
对不起,我不够清楚。我用小提琴更新了帖子,所以你可以看到它的实际效果。
标签: javascript addeventlistener appendchild