如果你有,比方说,img标签中的3MB图片,加载需要几秒钟的时间。当图像加载时,浏览器有点“打印”它 - 它先显示顶部,然后显示中间,然后显示底部。我如何防止这种情况发生? 我宁愿将图像隐藏起来,并在显示的第二个或第二个图像后显示 - 完全加载时。如何防止部分加载的图像显示?
0
A
回答
3
一个办法是给他们一个班,让他们opacity: 0
这样他们就不会显示:
<img src="/path/to/image" class="loading">
而且在CSS:
.loading {
opacity: 0;
}
在head
,我们覆盖,如果JavaScript的被禁用(所以我们对非JavaScript访问者不是不友好):
<noscript>
<style>
.loading {
opacity: 1;
}
</style>
</noscript>
...,然后在你的页面底部的代码,发现所有的图像,并删除类,他们已经加载的时候,和......(见注释):
(function() {
// Get an array of the images
var images = Array.prototype.slice.call(document.querySelectorAll("img.loading"));
// Hook their load and error events, even though they may have already fired
images.forEach(function(image) {
image.addEventListener("load", imageDone.bind(null, image));
image.addEventListener("error", imageDone.bind(null, image)); // Could handle errors differently
});
// Check to see if any images are already complete
checkImages();
function imageDone(img) {
img.classList.loading("remove");
images = images.filter(function(entry) { entry != img });
}
function checkImages() {
images.forEach(function(image) {
if (image.complete) {
imageDone(image);
}
});
if (images.length) {
// Check back in a second
setTimeout(checkImages, 1000);
}
}
})();
这是一个皮带和 - 方法。它会主动检查图像是否已完成加载,并且还会反应性地处理图像的load
和error
事件。从理论上讲,我们不应该需要setTimeout
,并且您可能会在没有它的情况下进行测试,但是...
请注意,一旦图像完成,我们删除该类,以使其可见。
2
老同学:
为了避免图像的部分显示,因为它呈现,你的大图像保存为进步,而不是基线 JPG格式。
渐进式选项被认为比突然出现的图像或缓慢的顶部到底部渲染你不喜欢的用户友好。渐进式文件变体甚至可以比其基线对应物小。
欲了解更多关于此阅读:The Return of the Progressive JPEG。
1
我认为这里的每个人都给了你一些很好的答案,我只是想补充一下.3MB对于网络图像来说相当大。不要对用于徽标或布局的图像使用较大的内容。如果您要加载的内容是您想要保持质量的很好的大型真实图像(或提供下载到高品质图形的某些内容),那么您应该只使用更大量的像素数据。 。除此之外,如果您执行Google搜索,则会发现大量用于加载图片的解决方案。我将用于较大图像的东西是jQuery/ajax解决方案。
相关问题
- 1. 防止加载部分视图
- 2. 如何防止使用css加载图像时显示图像替代文本
- 3. 如何防止页面显示图像?
- 4. 如何防止Firefox加载图像?
- 5. 如何防止android webview加载图像?
- 6. 防止Fancybox显示图像
- 7. 防止加载图像
- 8. 防止图像预加载?
- 9. JS:防止图像加载后设置为显示惰性:块
- 10. 防止列表项显示,而覆盖图像加载
- 11. Android通用图像加载器部分显示图像
- 12. 如何显示图像的一部分?
- 13. 如何加载instagram的部分图像?
- 14. 如何防止部分视图加载多次加载多个Javascript代码
- 15. 防止在图库中加载图像
- 16. 如何显示UIImageView的加载图像
- 17. Android通用图像加载器,显示图像的顶部部分
- 18. 如何在加载大图像时显示加载图像?
- 19. 如何防止在UITableView中显示没有行的部分?
- 20. 防止显示图像上拖动
- 21. 防止角度加载图像
- 22. jQuery toggle()防止加载图像
- 23. 防止图像加载在html中
- 24. 如何显示Fancybox预加载图像
- 25. 如何防止在iphone中scrollong加载图像视图?
- 26. 防止Python在加载脚本的某些部分时加载
- 27. 显示部分图像
- 28. 图像部分加载
- 29. 如何防止突出显示图标?
- 30. 如何防止默认加载地图?
可能重复[如何显示图像只有当它完全加载?](http://stackoverflow.com/questions/14373683/how-to-show-image-only-when-it-is-completely-加载) – chrki
你是指在标记中定义的图像?如果是这样,上述不会真的适用。但是如果你的意思是你动态添加的那个,它会的。 –