欢迎来到天天文库
浏览记录
ID:11537558
大小:15.86 KB
页数:3页
时间:2018-07-12
《javascript图片预加载技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、由于javascript无法获取img文件头数据,必须等待其加载完毕后才能获取真实的大小,所以lightbox类效果为了让图片居中显示,导致其速度体验要比直接输出的差很多。而本文所提到的预加载技术主要是让javascript快速获取图片头部数据的尺寸。一段典型的使用预加载获取图片大小的例子:varimgLoad=function(url,callback){varimg=newImage();img.src=url;if(img.complete){callback(img.width,img.heig
2、ht);}else{img.onload=function(){callback(img.width,img.height);img.onload=null;};};};可以看到使用onload的方式必须等待图片加载完毕,其速度不敢恭维。web应用程序区别于桌面应用程序,响应速度才是最好的用户体验。如果想要速度与优雅兼得,那就必须提前获得图片尺寸,如何在图片没有加载完毕就能获取图片尺寸?十多年的上网经验告诉我:浏览器在加载图片的时候你会看到图片会先占用一块地然后才慢慢加载完毕,并且这里大部分的图片都是没
3、有预设width与height属性的,因为浏览器能够获取图片的头部数据。基于此,只需要使用javascript定时侦测图片的尺寸状态便可得知图片尺寸就绪的状态。实现代码:varimgReady=function(url,callback,error){varwidth,height,intervalId,check,div,img=newImage(),body=document.body;img.src=url;//从缓存中读取if(img.complete){returncallback(img.w
4、idth,img.height);};//通过占位提前获取图片头部数据if(body){div=document.createElement('div');div.style.cssText='visibility:hidden;position:absolute;left:0;top:0;width:1px;height:1px;overflow:hidden';div.appendChild(img)body.appendChild(div);width=img.offsetWidth;height
5、=img.offsetHeight;check=function(){if(img.offsetWidth!==width
6、
7、img.offsetHeight!==height){clearInterval(intervalId);callback(img.offsetWidth,img.clientHeight);img.onload=null;div.innerHTML='';div.parentNode.removeChild(div);};};intervalId=setInterval(che
8、ck,150);};//加载完毕后方式获取img.onload=function(){callback(img.width,img.height);img.onload=img.onerror=null;clearInterval(intervalId);body&&img.parentNode.removeChild(img);};//图片加载错误img.onerror=function(){error&&error();clearInterval(intervalId);body&&img.pare
9、ntNode.removeChild(img);};};是不是很简单?这样的方式获取摄影级别照片尺寸的速度往往是onload方式的几十多倍,而对于web普通(800×600内)浏览级别的图片能达到秒杀效果。
此文档下载收益归作者所有