1,脚本代码:

 /**
  * 图片头数据加载就绪事件 - 更快获取图片尺寸
  * @version    2011.05.27
  * @author    TangBin
  * @see        http://www.planeart.cn/?p=1121
  * @param    {String}    图片路径
  * @param    {Function}    尺寸就绪
  * @param    {Function}    加载完毕 (可选)
  * @param    {Function}    加载错误 (可选)
  * @example imgReady('http://www.google.com.hk/intl/zh-CN/images/logo_cn.png', function () {
         alert('size ready: width=' + this.width + '; height=' + this.height);
     });
  */
 var imgReady = (function () {
     var list = [], intervalId = null,

     // 用来执行队列
     tick = function () {
         var i = 0;
         for (; i < list.length; i++) {
             list[i].end ? list.splice(i--, 1) : list[i]();
         };
         !list.length && stop();
     },

     // 停止所有定时器队列
     stop = function () {
         clearInterval(intervalId);
         intervalId = null;
     };

     return function (url, ready, load, error) {
         var onready, width, height, newWidth, newHeight,
             img = new Image();

         img.src = url;

         // 如果图片被缓存,则直接返回缓存数据
         if (img.complete) {
             ready.call(img);
             load && load.call(img);
             return;
         };

         width = img.width;
         height = img.height;

         // 加载错误后的事件
         img.onerror = function () {
             error && error.call(img);
             onready.end = true;
             img = img.onload = img.onerror = null;
         };

         // 图片尺寸就绪
         onready = function () {
             newWidth = img.width;
             newHeight = img.height;
             if (newWidth !== width || newHeight !== height ||
                 // 如果图片已经在其他地方加载可使用面积检测
                 newWidth * newHeight > 1024
             ) {
                 ready.call(img);
                 onready.end = true;
             };
         };
         onready();

         // 完全加载完毕的事件
         img.onload = function () {
             // onload在定时器时间差范围内可能比onready快
             // 这里进行检查并保证onready优先执行
             !onready.end && onready();

             load && load.call(img);

             // IE gif动画会循环执行onload,置空onload即可
             img = img.onload = img.onerror = null;
         };

         // 加入队列中定期执行
         if (!onready.end) {
             list.push(onready);
             // 无论何时只允许出现一个定时器,减少浏览器性能损耗
             if (intervalId === null) intervalId = setInterval(tick, 40);
         };
     };
 })();

2,调用方式:

2     alert('size ready: width=' this.width + '; height=' this.height);
3 });

(通过测试的浏览器:Chrome、Firefox、Safari、Opera、IE6、IE7、IE8)

原文链接:http://www.planeart.cn/?p=1121

【转】javascript-图片预加载技术的更多相关文章

  1. 再谈javascript图片预加载技术

    图片预加载技术的典型应用: 如lightbox方式展现照片,无疑需要提前获得大图的尺寸,这样才能居中定位,由于javascript无法获取img文件头数据,必须等待其加载完毕后才能获取真实的大小然后展 ...

  2. Javascript图片预加载详解

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  3. Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  4. javascript图片预加载

    图片预加载是非常常见的一个功能,PC和移动端都会用到,尤其是在移动端,只要涉及到较多图片的加载都会用到该技术.下面是移动端用到的,引入了zepto. <!DOCTYPE html> < ...

  5. javascript 图片预加载

    <!DOCTYPE > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ...

  6. 转载:用Jquery实现的图片预加载技术,可以实现有序加载和无序加载!

    一.背景 我们在做页面的时候,从用户体验的角度出发,肯定是希望用户以最快的速度看到完整的页面信息,但在实际情况中经常会遇到些问题. 比如受网速影响,页面加载素材的时间比较长,页面会出现短时间的错乱或者 ...

  7. 用es6类封装的图片预加载技术!

    1.HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  8. JQ封装图片预加载插件

    我们知道,图片的加载,特别是资源较大的图片,加载相当耗费时间.为了提高用户体验,不得不使用图片预加载技术来提前加载,以提高用户在浏览时的流畅度. 先来弄明白图片的懒加载和预加载的不同: 1)概念:懒加 ...

  9. 利用CSS、JavaScript及Ajax实现图片预加载的三大方法

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  10. javascript图片懒加载与预加载的分析

    javascript图片懒加载与预加载的分析 懒加载与预加载的基本概念.  懒加载也叫延迟加载:前一篇文章有介绍:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片. 预加载:提前加载图片, ...

随机推荐

  1. Java Logger(java日志)

    目录 1. 简介2. 安装3. log4j基本概念3.1. Logger3.2. Appender3.2.1. 使用ConsoleAppender3.2.2. 使用FileAppender3.2.3. ...

  2. 64位下好神奇啊(增加了PatchGuard技术保护自己,SSDT是相对地址,参数通过寄存器与rdi来传递)

    近期可能会有一个64位平台的驱动开发任务,找了些资料,对64位平台下的驱动开发略知一二了,好神奇. 一.在64位系统下,有一项PatchGuard技术,它是微软为了防止自己的代码被Patch,进而影响 ...

  3. *IDEA真好用

    使用maven做开发,在编辑pom.xml文件时

  4. iOS:自定义工具栏、导航栏、标签栏

    工具栏为UIToolBar,导航栏UINavigationBar,标签栏UITabBar.它们的样式基本上时差不多的,唯一的一点区别就是,工具栏一般需要自己去创建,然后添加到视图中,而导航栏和标签栏不 ...

  5. Android ActionBar中的下拉菜单

    在ActionBar中添加下拉菜单,主要有一下几个关键步骤: 1. 生成一个SpinnerAdapter,设置ActionBar的下拉菜单的菜单项 2. 实现ActionBar.OnNavigatio ...

  6. [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】

    (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有 ...

  7. 语言基础:C#运算符

    运算符 分类 符号 解释 优先级 算术运算符 ++   -- 加加  减减 由高到低,即执行顺序由上到下.(圆括号的优先级最高) *   /    % 乘  除  取余 +   - 加   减 关系运 ...

  8. 极客编程必备的五大PHP开发应用

    有了PHP应用可以帮助编码爱好者事半功倍,提升项目质量:有了这些最新的且灵活的PHP应用使创建编码项目更加简单.便捷.本文,我们收集了五大最新的PHP开发应用. PHP应用在网络上并不多见.最重要的是 ...

  9. bzoj1566

    好题,这道题体现了换一个角度计数的思想 a1^2+a2^2+……ak^2=(变成第1种输出序列的操作序列数目)^2+(变成第2种输出序列的操作序列数目)^2…… 脑洞大一点,这就相当于两个操作序列变成 ...

  10. 可视化PK纯代码

    简述 其实今天说的内容不仅仅局限于Qt,在很多其它语言或者框架中也适用,那就是 - 用可视化工具or文本编辑器?拖or不拖? 如果有人问我喜欢脱or不脱?我会毫不犹豫地说不脱,因为我比较矜持O(∩_∩ ...