这是一个完全愚蠢的问题。但我只是想澄清我的疑问。加载图像时,我们可以使用onload
或oncomplete
事件检查加载状态。但我只是想知道有多少图像是使用 JavaScript 加载的。真的有可能吗?
我的问题是,我们可以从 URL 获取图像大小吗?我们能得到在某个时间间隔内加载了多少图像吗?
这是一个完全愚蠢的问题。但我只是想澄清我的疑问。加载图像时,我们可以使用onload
或oncomplete
事件检查加载状态。但我只是想知道有多少图像是使用 JavaScript 加载的。真的有可能吗?
我的问题是,我们可以从 URL 获取图像大小吗?我们能得到在某个时间间隔内加载了多少图像吗?
如果您通过XMLHttpRequest
对象加载图像,您可以绑定到progress
事件并检查函数参数“事件”属性“加载”和“总计”。与往常一样,各种浏览器之间的支持可能会令人惊讶。
var req = new XMLHttpRequest();
req.addEventListener("progress", onProgress, false);
req.open();
function onProgress(ev) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
// ...
} else {
// Unable to compute progress information since the total size is unknown.
}
}
[更新]每个评论者@Bergi 的问题,如果您想在完全下载后将图像添加到 DOM,您可以添加一个新的图像元素:
“src”属性等于您通过 XHR 获取的 URL(并希望浏览器缓存能够防止冗余下载)。
或者将“src”属性设置为Base64 编码图像内容的数据 URI,而不用担心浏览器缓存。
var img = new Image(); // or document.createElement('img');
img.src = ... // URL from the above XHR request, or
img.src = 'data:image/png;base64,' + base64(xhrContent);
document.body.appendChild(img);
您可以使用适用于现代浏览器的html5 文件 api来实现这一点,它允许读取文件名、文件大小、mimetype 和对文件句柄的引用 - 请查看此示例