获取javascript预载图像的大小
我正尝试将服务器上生成的一些图像预加载到一个小网站。使用setWindowTimeout完成预加载并使用Image对象,设置onload回调,然后应用新请求uri。获取javascript预载图像的大小
对于某些请求,服务器可能不得不发信号通知图像是'未更改',而我通过发送一个小的1x1像素gif来做到这一点(似乎我需要发送实际图像,返回空的内容将导致Image对象不会触发onload)。在我的onload处理程序中,我想确定提取的图像的大小,然后确定是否应该用给定的图像更新可视图像。
下面是我目前的解决方案的片段(输出是一个div来帮助调试):
refresh: function() {
var newSrc = '/screenshot.ashx?tick=' + new Date().getTime();
var imgObj = new Image();
var self = this;
// this is called when load is done
imgObj.onload = function() {
//if (imgObj.complete)
// return;
if (imgObj.width > 1 && imgObj.height > 1) {
output.innerHTML += '<br/>Updating image:' + newSrc;
img.src = newSrc; //fiddler shows no reload here, read from cache
}
else {
output.innerHTML += '<br/>Empty image:' + newSrc;
}
self.setupNewRefresh();
};
output.innerHTML += '<br/>Loading image:' + newSrc;
imgObj.src = newSrc;
},
我似乎有两个问题:
一)imgObj.complete是假的时该函数首先调用但它仅调用一次(因此我的评论吧)和
b)我似乎无法加载时依赖于图像的宽度或高度属性。从我获取1x1像素的测试中,它有时会读出50,这在创建新图像时似乎是默认值(),有时会读出正确的大小1.
我的最终目标是有一个小块定期向服务器查询新图像的javascript逻辑,如果没有发生新的事情(1像素图像)或加载新图像,则不执行任何操作。我可能会在这里以错误的方式进行讨论,或者忽略了重要的属性或通话,所以我很乐意收到反馈。
编辑:在从mplungjan建议,我预装在一个隐藏的div来代替,这让我有问题,B)。仍然没有解决问题a)虽然;报告的完整=假一次,不再调用
我会继续前进,回答我的问题。
预加载图像到在DOM,而不是代码级元素,一个隐藏的元素是为实际得到正确的尺寸(感谢mplungjan)的伎俩。 a)问题,即完整事件,仍未解决。
作为一个方面说明我结束了使用,而不是因为它允许通过看返回的有效载荷的大小了XMLHttpRequest。
似乎你真的需要将图像加载到DOM来查看实际大小。我用一个隐藏的div来做到这一点。 – mplungjan 2010-07-22 13:28:26
您在加载调用时给src属性一个值...(img.src = newSrc;)我不认为那是必需的。当图像存在时,它会自动从缓存中重新加载。将其留给浏览器。 – foxybagga 2012-01-03 05:21:55