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 ready()的几种实现方法小结
Jun 18 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
Apr 25 Javascript
在jQuery中处理XML数据的大致方法
Aug 14 Javascript
jQuery检查元素存在性(推荐)
Sep 17 Javascript
JS动态生成年份和月份实例代码
Feb 04 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
Feb 16 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 jQuery
Vue中v-for的数据分组实例
Mar 07 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
Oct 25 Javascript
使用NestJS开发Node.js应用的方法
Dec 03 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
Mar 08 Javascript
Nuxt配置Element-UI按需引入的操作方法
Jul 06 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
浅析PHP 按位与或 (^ 、&amp;)
2013/06/21 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
node.js读取文件到字符串的方法
2015/06/29 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
67 个节约开发时间的前端开发者的工具、库和资源
2017/09/12 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
JQuery获得内容和属性方法解析
2020/05/30 jQuery
python从入门到精通(DAY 1)
2015/12/20 Python
详解python之简单主机批量管理工具
2017/01/27 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python操作mysql代码总结
2018/06/01 Python
Django后台admin的使用详解
2019/07/08 Python
python mysql断开重连的实现方法
2019/07/26 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
Python如何将模块打包并发布
2020/08/30 Python
python常量折叠基础知识点讲解
2021/02/28 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
物流仓管员工作职责
2014/01/06 职场文书
自荐信需注意事项
2014/01/25 职场文书
Python Pandas知识点之缺失值处理详解
2021/05/11 Python