js 利用image对象实现图片的预加载提高访问速度


Posted in Javascript onMarch 29, 2013

大量采用高解析度的图像的确可以让一个Web站点容光焕发。但同样也会造成站点访问速度下降——图片是文件,文件就要占用带宽,而带宽直接同访问等待时间相关。现在,让我们来学习一种名为图像预装载(image preloading)的小技巧来提高图像访问速度。

一些浏览器试图通过在本地缓存中保存这些图片来解决此问题。这样一来可以顺序调用这些图片——但对于首次使用这些图片的时候仍然会存在延时。预装载就是一种在需要图片之前就将图片下载到缓存的技术。采用这样的方式可以使当确实需要显示图片时迅速将其从缓存中恢复回来并立即显示。

Image()对象
最简单的图像预装载办法是使用JavaScript新建一个新的Image()对象,然后将希望预装载的图片URL传递给此对象。假设我们拥有一个名为heavyimagefile.jpg的图片文件,我们希望当用户鼠标指针移动到一张已有的图片上时显示此文件。为了能更快的对此文件进行预装载,我们简单的创建了一个名为heavyImage的新Image() 对象,然后将其通过onLoad()事件句柄同步装载到页面上。

<html> 
<head> 
<script language = "JavaScript"> 
function preloader() 
{ 
heavyImage = new Image(); 
heavyImage.src = "heavyimagefile.jpg"; 
} 
</script> 
</head> 
<body onLoad="javascript:preloader()"> 
<a href="#" onMouseOver="javascript:document.img01.src='heavyimagefile.jpg'"> 
<img name="img01" src="justanotherfile.jpg"></a> 
</body> 
</html>

注意,图片的标签(tag)本身并不处理onMouseOver()以及onMouseOut()事件,这也正是上面示例中的<img>标签被包括在<a>标签中的原因。标签<a>则包括了对这些事件类型的支持。

通过数组(arrays)装载多个图片
在实际情况中,你很有可能需要预装载不止一张的图片;比如,对于包括多个图片的菜单条,或者希望实现平滑的动画效果。要实现这些并不困难,只需要利用JavaScript的数组,如下例所示:

<script language="JavaScript"> 
function preloader() 
{ 
// counter 
var i = 0; 
// create object 
imageObj = new Image(); 
// set image list 
images = new Array(); 
images[0]="image1.jpg" 
images[1]="image2.jpg" 
images[2]="image3.jpg" 
images[3]="image4.jpg" 
// start preloading 
for(i=0; i<=3; i++) 
{ 
imageObj.src=images[i]; 
} 
} 
</script>

在上面的例子中,定义了变量i以及名为imageObj的Image()对象。然后定义了新数组images[],每一个数组元素将存储需要预装载图片的地址来源。最后,使用一个for()循环来遍历整个数组,并对每个元素指定Image()对象,以此将图片都预装载到缓存中。
Javascript 相关文章推荐
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
Mar 05 Javascript
javascript 隔行换色函数代码
Oct 24 Javascript
简单的Jquery全选功能
Nov 07 Javascript
js function定义函数的几种不错方法
Feb 27 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
js兼容火狐获取图片宽和高的方法
May 21 Javascript
微信小程序 选项卡的简单实例
May 24 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
create-react-app中添加less支持的实现
Nov 15 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
Jun 08 Javascript
详解JavaScript之ES5的继承
Jul 08 Javascript
jquery无缝向上滚动实现代码
Mar 29 #Javascript
验证码按回车不变解决方法
Mar 29 #Javascript
Jquery 自定义动画概述及示例
Mar 29 #Javascript
原生js拖拽(第一课 未兼容)拖拽思路
Mar 29 #Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
Mar 29 #Javascript
打印json对象的内容及JSON.stringify函数应用
Mar 29 #Javascript
图片延迟加载的实现代码(模仿懒惰)
Mar 29 #Javascript
You might like
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
openPNE常用方法分享
2011/11/29 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
window.onload追加函数使用示例
2014/03/03 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
Python批量发送post请求的实现代码
2018/05/05 Python
Python 字符串与数字输出方法
2018/07/16 Python
解析Python的缩进规则的使用
2019/01/16 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
保送生自荐信范文
2013/10/06 职场文书
交通事故检查书范文
2014/01/30 职场文书
高中家长寄语
2014/04/02 职场文书
项目负责人岗位职责
2015/02/15 职场文书
违纪开除通知书
2015/04/25 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电