onready怎么加img_img预加载获取图片大小方法

img预加载获取图片大小方法

[javascript] view

plaincopy

print?

// 更新:

// 1、保证回调执行顺序:error > ready > load;2、回调函数this指向img本身

// 01、增加图片完全加载后的回调 2、提高性能

/**

* 图片头数据加载就绪事件 - 更快获取图片尺寸

* @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);

});

*/

varimgReady = (function() {

varlist = [], intervalId =null,

// 用来执行队列

tick = function() {

vari = 0;

for(; i 

list[i].end ? list.splice(i--, 1) : list[i]();

};

!list.length && stop();

},

// 停止所有定时器队列

stop = function() {

clearInterval(intervalId);

intervalId = null;

};

returnfunction(url, ready, load, error) {

varonready, width, height, newWidth, newHeight,

img = newImage();

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);

};

};

})();

调用方法

[javascript] view

plaincopy

print?

imgReady('http://www.google.com.hk/intl/zh-CN/images/logo_cn.png',function() {

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

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值