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 相关文章推荐
最短的IE判断代码
Mar 13 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
轻量级网页遮罩层jQuery插件用法实例
Jul 31 Javascript
初步了解javascript面向对象
Nov 09 Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 Javascript
巧用Javascript的逻辑运算符
Dec 02 Javascript
正则中的回溯定义与用法分析【JS与java实现】
Dec 27 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
MVVM 双向绑定的实现代码
Jun 21 Javascript
javascript实现简易数码时钟
Mar 30 Javascript
详细分析React 表单与事件
Jul 08 Javascript
如何通过JS实现日历简单算法
Oct 14 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
如何使用脚本模仿登陆过程
2006/11/22 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
2016/12/19 PHP
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
python实现ftp文件传输功能
2020/03/20 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
施工安全协议书
2013/12/11 职场文书
高中生活自我鉴定
2014/01/18 职场文书
国培教师自我鉴定
2014/02/12 职场文书
公证委托书模板
2014/04/03 职场文书
保险公司岗前培训工作总结
2015/10/24 职场文书
Python OpenGL基本配置方式
2022/05/20 Python
springboot读取resources下文件的方式详解
2022/06/21 Java/Android