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 相关文章推荐
兼容FireFox 的 js 日历 支持时间的获取
Mar 04 Javascript
js jquery数组介绍
Jul 15 Javascript
formvalidator验证插件中有关ajax验证问题
Jan 04 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
Oct 28 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
Nov 09 Javascript
原生js实现焦点轮播图效果
Jan 12 Javascript
函数四种调用模式以及其中的this指向
Jan 16 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 Javascript
使用vue-router切换页面时实现设置过渡动画
Oct 31 Javascript
js实现双人五子棋小游戏
May 28 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 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
Apache设置虚拟WEB
2006/10/09 PHP
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
php操作redis常见方法示例【key与value操作】
2020/04/14 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
List Installed Hot Fixes
2007/06/12 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
jquery常用操作小结
2014/07/21 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
Python中对象的引用与复制代码示例
2017/12/04 Python
Python爬豆瓣电影实例
2018/02/23 Python
python argparser的具体使用
2019/11/10 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
英国名牌男装店:Standout
2021/02/17 全球购物
德国净水壶和滤芯品牌:波尔德PearlCo(家用净水器)
2020/04/29 全球购物
会计出纳岗位职责
2013/12/25 职场文书
派出所所长先进事迹
2014/05/19 职场文书
车辆委托书范本
2014/10/05 职场文书
模范教师事迹材料
2014/12/16 职场文书
bat批处理之字符串操作的实现
2022/03/16 Python
ant design charts 获取后端接口数据展示
2022/05/25 Javascript