javascript图片预加载

作者:heroguang 来源:heroguang的日志 时间:2009-08-30 12:47:00 

网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考虑流量的话,大可以像pconline一样每个页面只显示一张图片,让用户每看一张图片就需要重新下载一下整个页面。不过,在web2.0时代,更多人愿意用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片。


知道了一张图片的地址,需要把它在一个固定大小的html容器(可以是div等)里边显示出来,最重要的当然是需要知道这张即将显示的图片的宽和高,然后再结合容器的宽和高,按照一定的缩放比例使图片显示出来。因此,实现图片预加载就成为图片浏览器的核心功能了。

做过图片翻转效果的朋友其实都知道,要让图片轮换的时候不出现等待,最好是先让图片下载到本地,让浏览器缓存起来。这时,一般都会用到js里边的Image对象。一般的手段无非这样:

 function preLoadImg(url) { 
   var img = new Image(); 
   img.src = url; 
  }

通过调用preLoadImg函数,传入图片的url,就能使图片预先下载下来了。实际上,这里用到的预下载功能也和这基本一致。图片预下载下来后,通过 img的width和height属性,就能知道图片的宽和高了。但是需要考虑到,在做图片浏览器功能时,图片都是实时显示的。比如你点了显示的按钮,这个时候才会调用上边类似的代码来加载图片。因此,如果你直接用img.width的时候,图片还没有完全下载下来。因此,需要用一些异步的方法,等到图片下载完毕的时候才会再对img的width和height进行调用。

实现这样的异步方法实际上不难,图片的下载完毕事件也很简单,就是简单的onload事件。因此,我们可以写出下面的代码:

 function loadImage(url, callback) { 
   var img = new Image(); 
   img.src = url; 
   
   img.onload = function(){ //图片下载完毕时异步调用callback函数。 
   callback.call(img); // 将callback函数this指针切换为img。 
   }; 
  }

好了,再来写一个测试用例

function imgLoaded(){ 
   alert(this.width); 
  } 
  <input type="button" value="loadImage" onclick="loadImage('aaa.jpg',imgLoaded)"/>

在firefox中测试一下,发现不错,果然和预想的效果一样,在图片下载后,就会弹出图片的宽度来。无论点击多少次或者刷新结果都一样。

标签:JavaScript,预加载,图片
0
投稿

猜你喜欢

  • 使用 XML 模板 (MSSQL手册)

    2008-09-04 14:25:00
  • 什么是JSON及JSON的结构

    2008-06-15 07:16:00
  • 设置SQLServer数据库中某些表为只读的多种方法分享

    2012-07-11 15:41:05
  • MySQL存储过程savepoint rollback to

    2008-12-03 16:02:00
  • 名词解释:带你轻松接触13个数据库术语

    2009-05-13 10:32:00
  • 一段Asp301重定向过程代码

    2010-05-04 16:38:00
  • asp如何判断一个电子信箱格式是否有效?

    2010-01-12 20:18:00
  • RHEL下架设MYSQL集群

    2008-12-24 16:05:00
  • 如何优化网站图片以快速显示

    2008-04-05 10:09:00
  • IE下img多余5像素空白

    2009-06-08 13:17:00
  • 谈点关于checkbox的事情

    2010-09-28 14:49:00
  • 看看那些名牌LOGO的成长史

    2009-03-24 20:37:00
  • 关于数据库的alter table操作和索引概念

    2009-12-15 21:57:00
  • 解析:快速的掌握 MySQL支持的操作系统

    2008-12-31 17:18:00
  • 数据库技巧——MySQL十大优化技巧

    2011-01-31 16:44:00
  • ORACLE常见错误代码的分析与解决三

    2010-07-26 13:28:00
  • 非原型 不设计

    2010-01-21 12:51:00
  • Bad Tags — html有害的标签

    2008-10-13 19:47:00
  • 为WordPress增加微博功能

    2010-08-31 15:01:00
  • Msxml2.XMLHTTP Microsoft.XMLHTTP new XMLHttpRequest用法

    2010-03-30 09:43:00
  • asp之家 网络编程 m.aspxhome.com