js 利用image对象实现图片的预加载提高访问速度

 更新时间:2013年03月29日 16:53:58   作者:  
我们来学习一种名为图像预装载(image preloading)的小技巧来提高图像访问速度,一些浏览器试图通过在本地缓存中保存这些图片来解决此问题,感兴趣的朋友可以了解下
大量采用高解析度的图像的确可以让一个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()对象,以此将图片都预装载到缓存中。

相关文章

  • JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析

    JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析

    这篇文章主要介绍了JS中类的静态方法,静态变量,实例方法,实例变量区别与用法,结合实例形式详细分析了JS中类的静态方法,静态变量,实例方法,实例变量相关功能、使用方法及操作注意事项,需要的朋友可以参考下
    2020-03-03
  • js获取USB扫码枪数据的方法

    js获取USB扫码枪数据的方法

    这篇文章主要为大家详细介绍了js获取USB扫码枪数据的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • UniApp WebView页面中的请求跨域问题解决

    UniApp WebView页面中的请求跨域问题解决

    在使用UniApp开发中,通过WebView组件加载本地网页时,往往会遇到跨域问题,下面这篇文章主要介绍了UniApp WebView页面中的请求跨域问题解决的相关资料,需要的朋友可以参考下
    2024-10-10
  • webpack4 SCSS提取和懒加载的示例

    webpack4 SCSS提取和懒加载的示例

    这篇文章主要介绍了webpack4 SCSS提取和懒加载的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • js实现坦克移动小游戏

    js实现坦克移动小游戏

    这篇文章主要为大家详细介绍了js实现坦克移动小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • 详解ES6 中的迭代器和生成器

    详解ES6 中的迭代器和生成器

    迭代器是一个统一的接口,它的作用是使各种数据结构可以被便捷的访问,它是通过一个键为Symbol.iterator的方法来实现,这篇文章主要介绍了ES6 中的迭代器和生成器,需要的朋友可以参考下
    2022-08-08
  • JS Map 和 List 的简单实现代码

    JS Map 和 List 的简单实现代码

    本篇文章是对在JS中Map和List的简单实现代码进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • 分享一个自己写的简单的javascript分页组件

    分享一个自己写的简单的javascript分页组件

    这篇文章主要分享一个自己写的简单的javascript分页组件,效果十分不错,代码也很详尽,这里推荐给小伙伴们。
    2015-02-02
  • JavaScript实现下拉列表框数据增加、删除、上下排序的方法

    JavaScript实现下拉列表框数据增加、删除、上下排序的方法

    这篇文章主要介绍了JavaScript实现下拉列表框数据增加、删除、上下排序的方法,涉及javascript针对页面下拉列表框元素的添加、删除及移动的相关技巧,具有一定参考借鉴,需要的朋友可以参考下
    2015-08-08
  • 封装好的js判断操作系统与浏览器代码分享

    封装好的js判断操作系统与浏览器代码分享

    这篇文章主要介绍了封装好的js判断操作系统与浏览器代码分享,对于我们做系统、浏览器兼容非常有帮助,需要的朋友可以参考下
    2015-01-01

最新评论