绿色资源网

电脑版
提示:原网页已由神马搜索转码, 内容由www.downcc.com提供.
您的位置:首页网页设计网页特效→ javascript图片预加载技术

javascript图片预加载技术

我要评论2011/03/15 09:55:50 来源:绿色资源网编辑:绿色资源站 评论:0点击:229次

由于javascript无法获取img文件头数据,必须等待其加载完毕后才能获取真实的大小,所以lightbox类效果为了让图片居中显示,导致其速度体验要比直接输出的差很多。而本文所提到的预加载技术主要是让javascript快速获取图片头部数据的尺寸。

一段典型的使用预加载获取图片大小的例子:

varimgLoad = function(url, callback) {
varimg = newImage();

img.src = url;
if(img.complete) {
callback(img.width, img.height);
} else{
img.onload = function() {
callback(img.width, img.height);
img.onload = null;
};
};

};

可以看到使用onload的方式必须等待图片加载完毕,其速度不敢恭维。

web应用程序区别于桌面应用程序,响应速度才是最好的用户体验。如果想要速度与优雅兼得,那就必须提前获得图片尺寸,如何在图片没有加载完毕就能获取图片尺寸?

十多年的上网经验告诉我:浏览器在加载图片的时候你会看到图片会先占用一块地然后才慢慢加载完毕,并且这里大部分的图片都是没有预设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.width, 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 = img.offsetHeight;

check = function() {
if(img.offsetWidth !== width || img.offsetHeight !== height) {
clearInterval(intervalId);
callback(img.offsetWidth, img.clientHeight);
img.onload = null;
div.innerHTML = '';
div.parentNode.removeChild(div);
};
};

intervalId = setInterval(check, 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.parentNode.removeChild(img);
};

};

是不是很简单?这样的方式获取摄影级别照片尺寸的速度往往是onload方式的几十多倍,而对于web普通(800×600内)浏览级别的图片能达到秒杀效果。

关键词:javascript

相关阅读

阅读本文后您有什么感想? 已有 人给出评价!

  • 0

  • 0

  • 0

  • 0

  • 0

  • 0

用户评论

热门评论

最新评论

发表评论查看所有评论(0)

昵称:
请不要评论无意义或脏话,我们所有评论会有人工审核.
字数: 0/500(您的评论需要经过审核才能显示)

相关软件

热点图文

    更多+

    精品软件