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
投稿

猜你喜欢

  • opencv 摄像机标定的实现

    2023-09-17 16:08:06
  • js表单验证控制代码大全

    2010-03-07 14:25:00
  • mysql基于正则实现模糊替换字符串的方法分析

    2024-01-25 05:47:36
  • SQL字符串处理函数大全

    2024-01-25 07:09:13
  • javascript获取select标签选中的值

    2024-05-09 10:34:41
  • asp如何从数据库中删除废旧的电子信箱地址?

    2009-11-15 20:04:00
  • 如何快速一次性卸载所有python包(第三方库)呢

    2022-08-18 12:12:58
  • sql server 复制表从一个数据库到另一个数据库

    2024-01-18 23:51:55
  • mysql代码执行结构实例分析【顺序、分支、循环结构】

    2024-01-21 23:18:40
  • python网络爬虫学习笔记(1)

    2023-12-24 04:08:16
  • DateDiff函数在Sql与Access中的区别

    2009-06-04 18:02:00
  • 网页设计软件FrontPage快捷键一览

    2008-02-24 16:55:00
  • JavaScript实现点击改变图片形状(transform应用)

    2024-05-13 09:18:32
  • Python txt文件如何转换成字典

    2022-01-10 21:55:05
  • SQL语句的执行原理分析

    2012-01-29 18:17:36
  • 实用的Go语言开发工具及使用示例

    2024-04-26 17:25:25
  • mysqld_safe启动脚本源码阅读、分析

    2024-01-22 14:33:21
  • selenium中常见的表单元素操作方法总结

    2021-06-15 23:54:32
  • Python中import导入不同目录的模块方法详解

    2021-04-08 02:37:08
  • 利用Python制作简易的核酸检测日历

    2022-02-04 00:55:53
  • asp之家 网络编程 m.aspxhome.com