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 全角转半角部分
Oct 28 Javascript
JQuery 选择和过滤方法代码总结
Nov 19 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
Jan 20 Javascript
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
jQuery实现背景弹性滚动的导航效果
Jun 01 Javascript
AngularJS基础 ng-init 指令简单示例
Aug 02 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
Dec 18 Javascript
基于Node的React图片上传组件实现实例代码
May 10 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
JS/jQuery实现简单的开关灯效果【案例】
Feb 19 jQuery
Vue基础学习之项目整合及优化
Jun 02 Javascript
如何对react hooks进行单元测试的方法
Aug 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
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
python中int与str互转方法
2018/07/02 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
公司清洁工岗位职责
2013/12/14 职场文书
家长会演讲稿范文
2014/01/10 职场文书
端午节活动总结报告
2015/02/11 职场文书
上诉答辩状范文
2015/05/22 职场文书
复活读书笔记
2015/06/29 职场文书
小学运动会报道稿
2015/07/22 职场文书