下面的函数实现了一个我们想要的最基本的图片预加载效果

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
    var 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'
})

最新文章

  1. C#设计模式系列:桥接模式(Bridge)
  2. Linux笔记-常用的命令(15-3-30)
  3. codevs1225 八数码难题
  4. Django模型修改及数据迁移
  5. uva 11039
  6. Android中的事件分发机制总结
  7. ***PHP请求服务curl以及json的解析
  8. UVA 465 (13.08.02)
  9. 计算机网络VLAN学习
  10. 用python发送GET和POST请求
  11. POJ 1838 Banana (并查集)
  12. [图形学] Chp17 OpenGL光照和表面绘制函数
  13. WeakHashMap源码解读
  14. PHP json_encode/json_decode与serialize/unserializ性能测
  15. Flask--四种请求钩子函数
  16. 前端学习 -- Xhtml语法规范
  17. MySQL学习笔记:调用存储过程或函数报1418错误
  18. SEH分析笔记(X64篇)
  19. php array_push 与 $arr[]=$value 性能比较
  20. 微信小程序之wx.requestPayment 发起微信支付

热门文章

  1. 如何创建自己的ruby gem包
  2. SourceInsight-Symbol not found
  3. The DiskSpd Storage Performance Tool
  4. Golang学习途径总结
  5. ny42 一笔画问题
  6. How do I iterate over a Scala List (or more generally, a sequence) using theforeach method or for loop?
  7. 旋转加载loading和点点加载loadingdemo
  8. TOMCAT8源码分析——处理请求分析(下)
  9. JAVA-JSP指令元素之page指令
  10. iOS 为什么使用xcode8上传app包到appStore无法构建版本