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 相关文章推荐
jquery 多行滚动代码(附详细解释)
Jun 17 Javascript
IE 当eval遇上function的处理
Aug 09 Javascript
js之事件冒泡和事件捕获详细介绍
Oct 28 Javascript
js 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
JS实现根据当前文字选择返回被选中的文字
May 21 Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 Javascript
AngularJs Dependency Injection(DI,依赖注入)
Sep 02 Javascript
vue.js利用Object.defineProperty实现双向绑定
Mar 09 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
Mar 10 Javascript
vue实现文件上传功能
Aug 13 Javascript
Vue中使用matomo进行访问流量统计的实现
Nov 05 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 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 XML数据解析代码
2010/05/26 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
2013/04/26 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
php的ajax简单实例
2014/02/27 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
Javascript变量函数浅析
2011/09/02 Javascript
window.navigate 与 window.location.href 的使用区别介绍
2013/09/21 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
JS简单计算器实例
2015/01/20 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
Python标准库inspect的具体使用方法
2017/12/06 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
路政管理专业个人自荐信范文
2013/11/30 职场文书
小孩百日宴答谢词
2014/01/15 职场文书
联欢晚会主持词
2014/03/25 职场文书
实验室的标语
2014/06/20 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
董事长助理岗位职责
2015/02/11 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android