js中数组作为参数传递的定义
下⾯的函数实现了⼀个我们想要的最基本的图⽚预加载效果
function preloadimages(arr){
var newimages=[]
var arr=(typeof arr!="object")? [arr] : arr //确保参数总是数组
for (var i=0; i<arr.length; i++){
newimages[i]=new Image()
newimages[i].src=arr[i]
}
}
我们可以通过如下的⽅式加载我们想要的图⽚
preloadimages(['1.gif', '2.gif', '3.gif'])
preloadimages(['1.gif', '2.gif', '3.gif']).done(function(images){
//当图⽚全部加载完成之后,执⾏此处的代码
//images参数是Array类型,对应加载进来的图像
//images[0] 对应的是第⼀张图像
})
function preloadimages(arr){
var newimages=[], loadedimages=0
typeof arrayvar postaction=function(){} //此处增加了⼀个postaction函数
var arr=(typeof arr!="object")? [arr] : arr
function imageloadpost(){
loadedimages++
if (loadedimages==arr.length){
postaction(newimages) //加载完成⽤我们调⽤postaction函数并将newimages数组做为参数传递进去
}
}
for (var i=0; i<arr.length; i++){
newimages[i]=new Image()
newimages[i].src=arr[i]
newimages[i].onload=function(){
imageloadpost()
}
newimages[i].onerror=function(){
imageloadpost()
}
}
return { //此处返回⼀个空⽩对象的done⽅法
done:function(f){
postaction=f || postaction
}
}
}
上⾯的代码,我们稍作修改了⼏个地⽅:
⾸先,我们增加了⼀个postaction函数,该函数被⽤来做为图⽚加载完成后的回调函数,⽤户可以在后⾯调⽤的时候⽤⾃⼰的处理函数覆盖掉该函数。
第⼆,我们的preloadimages()函数返回了⼀个空对象,其中包含⼀个简单的done()⽅法,这是实现本次改造的关键所在,确保了链式调⽤的实现。
最后,我们的调⽤变为如下形式
preloadimages(['1.gif', '2.gif', '3.gif']).done(function(images){
alert(images.length) //alerts 3
alert(images[0].src+" "+images[0].width) //alerts '1.gif 220'
})
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论