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 插件之仿“卓越亚马逊”首页弹出菜单效果
Dec 25 Javascript
js监听输入框值的即时变化onpropertychange、oninput
Jul 13 Javascript
bootstrap提示标签、提示框实现代码
Dec 28 Javascript
利用JQuery实现datatables插件的增加和删除行功能
Jan 06 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
Jul 24 Javascript
jQuery实现的简单手风琴效果示例
Aug 29 jQuery
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
jQuery实现高级检索功能
May 28 jQuery
vue 实现Web端的定位功能 获取经纬度
Aug 08 Javascript
JavaScript 自定义html元素鼠标右键菜单功能
Dec 02 Javascript
vue过滤器实现日期格式化的案例分析
Jul 02 Javascript
详解datagrid使用方法(重要)
Nov 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
php微信公众平台开发类实例
2015/04/01 PHP
jquery插件开发方法(初学者)
2012/02/03 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
angular.fromJson与toJson方法用法示例
2017/05/17 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
node创建Vue项目步骤详解
2020/03/06 Javascript
python映射列表实例分析
2015/01/26 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
pycharm安装和首次使用教程
2018/08/27 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
机器学习实战之knn算法pandas
2019/06/22 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
揠苗助长教学反思
2014/02/04 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
总经理的岗位职责
2014/02/23 职场文书
五年级学生评语
2014/04/22 职场文书
说明书范文
2014/05/07 职场文书
2016公司年会通知范文
2015/04/25 职场文书
简短清晨问候语
2015/11/10 职场文书