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阻止浏览器返回按钮的方法
Mar 18 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
JavaScript中的对象与JSON
Jul 03 Javascript
基于jQuery实现点击弹出层实例代码
Jan 01 Javascript
jQuery Mobile中的button按钮组件基础使用教程
May 23 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
jQuery插件ContextMenu自定义图标
Mar 15 Javascript
Vue2.0如何发布项目实战
Jul 27 Javascript
原生JS实现Ajax跨域请求flask响应内容
Oct 24 Javascript
使用Javascript简单计算器
Nov 17 Javascript
用Vue.js方法创建模板并使用多个模板合成
Jun 28 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生成UTF8文件的方法
2010/05/15 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
PHP实现搜索相似图片
2015/09/22 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
cookie的secure属性详解
2015/04/08 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
详解React中合并单元格的正确写法
2019/01/08 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
浅谈vue权限管理实现及流程
2020/04/23 Javascript
零基础写python爬虫之爬虫编写全记录
2014/11/06 Python
python基础教程项目二之画幅好画
2018/04/02 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
师范生实习自我鉴定
2013/11/01 职场文书
酒店实习个人鉴定
2013/12/07 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
2015年教师节广播稿
2015/08/19 职场文书
学生安全责任协议书
2016/03/22 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
Golang 链表的学习和使用
2022/04/19 Golang