帝国先锋软件-软件前沿,先锋体验

最新更新| 软件分类| 专题合集| 软件标签| 软件发布

首页 > 教程攻略 > 网页设计

_JavaScript图片预加载技术_ _图片预加载优化

2026-01-11 13:07:37作者:帝国先锋软件

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

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

var imgLoad = function (url, callback) {
var img = new Image();

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定时侦测图片的尺寸状态便可得知图片尺寸就绪的状态。

实现代码:

var imgReady = function (url, callback, error) {
var width, height, intervalId, check, div,
img = new Image(),
body = document.body;

img.src = url;

/ 从缓存中读取
if (img.complete) {
return callback(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内)浏览级别的图片能达到秒杀效果。

标签:

相关资讯

  • Photoshop CS5 常用快捷键_成为PS大师 Photoshop CS5 常用快捷键_成为PS大师
    Photoshop Cs5上经常使用的快捷键工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】裁剪工具 【C】移动工具 【V】套索、多边形套索、磁性套索 【L】魔棒工具 【W】喷枪工具 【J】画笔工具 【B】像皮图章、图案图章 【S】历
    阅读:8032026-01-23
  • 闪存文件打开方法_如何打开swf文件 闪存文件打开方法_如何打开swf文件
    在上文:swf是什么文件 一文中我们知道了swf文件是flash动画文件,那么swf文件用什么打开呢?其实需要打开swf文件方法有非常多,下面编辑介绍大家几种最简单的打开方法,希望对接触swf文件新手朋友有所帮助.swf文件打开方法汇总一:使用flash软件打开swf文件 由于flas
    阅读:1212026-01-21
  • 网页字体大小调整_网页字体颜色修改 网页字体大小调整_网页字体颜色修改
    1、阅读:8692026-01-19
  • CSS隐藏元素方法_网页设计技巧 CSS隐藏元素方法_网页设计技巧
    在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间;有的可以响应点击,有的不能响应点击。下面一个个列出,选一个适合你的{ display: none; /* 不占据空间,无法点击 */ }{ visibility: hidden; /* 占据空间,无法点击 */
    阅读:9442026-01-16
  • 判断IE浏览器的方法_IE浏览器检测技巧 判断IE浏览器的方法_IE浏览器检测技巧
    前几天在网上看到一个技术牛人写的世界上判断是否IE浏览器之最短的js代码,如下: