今天看一篇文章,再谈javascript图片预加载技术(http://www.planeart.cn/?p=1121)

http://www.qiqiboy.com/2011/05/20/javascript-image-preload.html

恩,对于web相册来言确实可以改善很多了呦。很有用~

/**
* 图片头数据加载就绪事件 - 更快获取图片尺寸
* @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);
};
};
})();

转载于:https://www.cnblogs.com/jennyQ/archive/2011/11/26/2264644.html

转javascript图片预加载技术相关推荐

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

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

  2. 很山寨的网页游戏图片预加载技术

    很山寨的网页游戏图片预加载技术 以下一种简单易懂,方便易用的网页图片预加载技术.:=D. 这种预加载技术使用了javascript技术.静态页面技术.div隐藏技术.gif动态图片技术.bash脚本技 ...

  3. 3种Javascript图片预加载的方法详解

    3种Javascript图片预加载的方法详解 预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度. 这对图片画廊及图片占据很大比例 ...

  4. php预加载图片,图片预加载的一个简明例子

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

  5. 一种网页游戏图片预加载方案

    一种网页游戏图片预加载方案 上个月我写了一篇关于网页游戏图片预加载技术的文章,叫<很山寨的网页游戏图片预加载技术>.这个方案用到项目上后,发现了一些问题,经过大家的努力,这些问题基本得到解 ...

  6. imageReady 图片预加载

    imageReady javascript图片预加载,监测图片加载完成,获取图片真实尺寸的组件(图片延迟加载) 如何使用 // 首先在页面中引入imageReady.js/** * @param im ...

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

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

  8. 利用CSS、JavaScript及Ajax实现图片预加载的三大方法及优缺点分析

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

  9. CSS、JavaScript和Ajax实现图片预加载的三大方法及优缺点分析

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

最新文章

  1. 正则表达式用户名密码电话身份证Email使用
  2. 提效率享效益,看华天CAPP如何优化天润曲轴工艺管理
  3. 查询存储过程所需参数
  4. 【Hibernate】dao层 +getHibernateTemplate()方法解析
  5. Docker 1.7.0 深度解析
  6. ant design pro总是跨域,proxy也没设置错误,原来是浏览器缓存,清理Chrome缓存就可以了...
  7. Windows下搭建HTK
  8. [转]在EntityFramework6中执行SQL语句
  9. UIApplication, UIApplicationDelegate,UIApplicationMain的分析
  10. PHP file_get_contents(‘php://input‘) 和POST的区别
  11. appender log4j 扩展_详解Tomcat使用Log4j输出catalina.out日志
  12. 学语言python研究生专业目录一览表_本科专业与研究生学科专业目录对照表格模板...
  13. 芯片厂商的电机控制方案
  14. 单片机系统的电磁干扰要如何消除?
  15. 格式塔理论的四个原则_使用格式塔理论改善用户体验
  16. mysql 存储ip 且 ip 分段
  17. pythonturtle画丘比特之箭_python 使用 turtle 画双心(丘比特之箭)
  18. 基于51单片机+ULN2003控制步进电机S曲线加减速
  19. 网络与信息安全工程师职位要求
  20. Git Bash中怎么复制与粘贴

热门文章

  1. jmeter对需要登录的接口进行性能测测试
  2. 从零开始React:一档 React环境搭建,语法规则,基础使用
  3. 分享一个Go按行读取命令行输入的例子
  4. win7删除桌面文件需要刷新才会消失(2种解决方法)
  5. C++中类的继承方式的区别以及private public protected 范围
  6. POJ 3041 Asteroids(最小点覆盖)题解
  7. 链表节点的删除(删除重复无序节点)
  8. 57-高级路由:分发列表:多协议分发列表实验:DV、LS
  9. 怎样查看光驱硬盘托架的尺寸
  10. php-5.2.3.tar.bz2.gz 的解压方法