创建图像对象时,可以使用"complete"属性或"onload"方法了解何时完全加载,然后,此图像已使用一些时间进行处理(例如调整大小),在大文件中可能是几秒钟。
如何知道浏览器何时完成处理图像加载后?
编辑:在例子中可以看到一个滞后之间的"完整"的消息和图像的外观,我想避免这种情况。
使用"onload"方法的示例:
var BIGimage;
putBIGimage();
function putBIGimage(){
BIGimage=document.createElement("IMG");
BIGimage.height=200;
BIGimage.src="http://orig09.deviantart.net/5e53/f/2013/347/f/d/i_don_t_want_to_ever_leave_the_lake_district_by_martinkantauskas-d6xrdch.jpg";
BIGimage.onload=function(){waitBIGimage();};
}
function waitBIGimage(){
console.log("Complete.");
document.body.appendChild(BIGimage);
}
使用"complete"属性的示例:
var BIGimage;
putBIGimage();
function putBIGimage(){
BIGimage=document.createElement("IMG");
BIGimage.height=200;
BIGimage.src="http://orig09.deviantart.net/5e53/f/2013/347/f/d/i_don_t_want_to_ever_leave_the_lake_district_by_martinkantauskas-d6xrdch.jpg";
waitBIGimage();
}
function waitBIGimage(){
if (!BIGimage.complete){
console.log("Loading...");
setTimeout(function(){
waitBIGimage();
},16);
} else {
console.log("Complete.");
document.body.appendChild(BIGimage);
}
}
编辑:感谢@Kaiido的回应,我做了这个解决方案,等待图像处理。
一个二个一个一个
2条答案
按热度按时间jqjz2hbq1#
HTMLImageElement接口有一个
decode()
方法,它允许我们等待直到图像准备好绘制,就像你想要的那样。另一种方法是利用CanvasContext2D
drawImage
方法可以同步的事实。有些浏览器可能会尝试延迟下一个绘画帧的实际绘画,但通过将画布绘制到其自身上,我们可以强制大多数当前的UA同步呈现图像。因此,您可以在
waitBIGimage
方法中将其用作等待方法。在我的Firefox上,处理图像大约需要1秒钟,而在我的Chrome上,速度要快一些。
但是方法的一个大问题是它是同步的,因此在处理Image的整个过程中都会阻塞脚本。
还有一种方法是使用
createImageBitmap()
方法,该方法应该在GPU中分配图像位图,准备进行绘制。u0sqgete2#
没有可靠的方法可以知道-您的浏览器可以继续执行任意javascript或执行内置函数(例如,调整浏览器窗口大小),这可能直接或间接影响图像,并导致图像被重绘,或看起来暂时无法完成绘制。
您可以在图像的生命周期中挂钩到特定的事件,但是,严格地说,“完成”只在浏览器窗口关闭时发生。