`
taro
  • 浏览: 135413 次
  • 性别: Icon_minigender_1
  • 来自: 东京
社区版块
存档分类
最新评论

Javascript实现图片预加载【回调函数,多张图片】

阅读更多

        使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果。此时程序中就会涉及多张图片预加载代码。当接二连三的案例中都涉及图片预加载时,就需要考虑把这个功能封装为一个通用方法。

 

(1)下面为JS实现图片预加载方法loadImages():

 

//实现一系列图片的预加载
//参数sources:图片信息关联数组
//参数callback:回调函数——图片预加载完成后立即执行此函数。
function loadImages(sources, callback){
    var count = 0,
        images ={},
        imgNum = 0;
    for(src in sources){
        imgNum++;
    }
    for(src in sources){
        images[src] = new Image();
        images[src].onload = function(){
            if(++count >= imgNum){
                callback(images);
            }
        }
        images[src].src = sources[src];
    }
}

 

(2)在JS中调用预加载函数:

 

//存储图片链接信息的关联数组
var sources = {
    ietoHell : "img/IEtoHell.jpg",
    fuckIE : "img/fuckIE.jpg"
 };

//调用图片预加载函数,实现回调函数
 loadImages(sources, function(images){
//TO-DO something
    ctx.drawImage(images.ietoHell, 20,20,100,100);
    ctx.drawImage(images.fuckIE, 140,20,100,100);
 });

 

注意事项:

 

(1)先绑定image.onload事件,后加载图片

 

images[src] = new Image();
images[src].onload = function(){
    if(++count >= imgNum){
        callback(images);
    }
}
images[src].src = sources[src];

        原因:如果图片从缓存中加载,速度非常快以至于没来得及绑定事件就加载完毕,自然不会触发绑定事件。

 

(2)for...in循环 与 for循环的区别

        for循环用于迭代数组(array)

        for...in循环用于迭代对象(object, {})或者关联数组(hash array)

分享到:
评论
1 楼 bingb511 2016-09-28  
用这个方法加载的图片要模糊啊?

相关推荐

    学习JavaScript图片预加载模块

    前言 在一个应用中,通常会有很多图片,众所周知,加载图片需要时间,在图片没有加载出来之前,页面会是空白,为了提升用户体验,...2.当所有图片加载完后,又要接着执行其他的任务,这需要一个回调函数。 3.记录已经

    preLoad:一款基于Zepto的预加载插件,提供进度回调

    imgready:图片正在加载中执行的回调函数,接受两个参数:e和进度(注:进度为0-1之间的小数) allready:图片全加载完成后执行的回调函数 reloadCount: 如果图片请求失败再次请求的次数,默认为0 绘制到DOM元素上 ...

    JS实现预加载视频音频/视频获取截图(返回canvas截图)

    #load-media.js /** * Create by Capricorncd 2017 */ // 同域资源实现视频截图,可上传的图片数据格式 // 非同域资源实现canvas截图预览 // 提示码 ... * @param opts.callback 回调函数 */ func

    JavaScript详解(第2版)

     18.3.5 使用回调函数处理响应   18.3.6 浏览器缓存问题   18.4 结合起来   18.4.1 使用Ajax从文件中获取文本   18.4.2 使用Ajax从文件中获取XML   18.4.3 Ajax和表单   18.5 Ajax和JSON   ...

    超实用的jQuery代码段

    1.9 不可不知的Callback回调 1.10 提高效率的链式(Chaining)操作 1.11 在新窗口中打开链接 1.12 强制在弹出窗口中打开链接 1.13 平滑滚动页面到某个锚点 1.14 阻止文本行换行 1.15 实现iframe高度自适应 1.16 实现...

    artDialog_Demo

    2、 预加载皮肤背景图片 3、 优化拖动 v2.0.6 1、 解决页面载入即弹出的情况造成水平对齐不正常的BUG(主要是dom ready事件 绑定) 2、 增加parent参数,支持对话框穿越框架在父页面弹出 v2.0.5 1、 剔除...

    SeamlessLoop:在没有特定浏览器音频API的情况下在HTML5JavaScript上重现无缝无缝的音频循环

    适用于JavaScript的SeamlessLoop 2.0 ... 当您尝试无缝循环而两者之间没有间隙时,标准循环属性是无用的。 这是一种使用间隔和“双缓冲区”音频对象来实现无缝循环的方法。... 建立您的回调函数,当所有声音都被预

    easy-scroll:轻量级的本机javascript库,可实现动画的平滑滚动

    可以通过回调随时取消滚动 安装 npm install easy-scroll --save 或者,您可以通过脚本标签加载它,如下所示: [removed] 输入 ES6 import easyScroll from 'easy-scroll'; 普通JS var easyScroll = require('...

    【卷一/共两卷】AJAX实战pdf高清版90M

    2.5.4 使用回调函数监视请求 2.5.5 完整的生命周期 2.6 Ajax有何不同 2.7 小结 2.8 资源 第3章 使AjaX秩序井然 3.1 从混沌到秩序 3.1.1 模式:创造通用的词汇表 3.1.2 重构与Ajax 3.1.3 保持均衡 3.1.4 重构实战 3.2...

    精通AngularJS part1

    使用&提供一个回调表达式227 实现分页组件228 为指令添加分页跳转回调229 87创建一个自定义验证指令230 需要其他指令的控制器231 可选的依赖控制器231 查找祖先元素的控制器232 使用ngModelController232 ...

    jquery插件使用方法大全

    它几乎与 $.get(url, data, success) 等价,不同的是它不是全局函数,并且它拥有隐式的回调函数。当侦测到成功的响应时(比如,当 textStatus 为 "success" 或 "notmodified" 时),.load() 将匹配元素的 HTML 内容...

    DWR.xml配置文件说明书(含源码)

    如果你想采用jdom converter,你必须很清楚地知道jdom converter是否可以被加载.这就是DWR保留上面的提示信息的原因. 3 The Creators DWR共有三种Creator,最简单的”new”是调用bean的默认构造函数创建实例.”...

    大名鼎鼎SWFUpload- Flash+JS 上传

    针对每个文件在上传前都提供一个最后确认的时间回调 解决了v1.0.2版本中未描述到的关于Flash的bug 解决的v1.0.2中的bug: 在IE中,刷新的时候FLASH无法加载(详细可见我之前的debug过程) 在FireFox中,如果窗口...

    ExtAspNet_v2.3.2_dll

    +为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。 -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!",...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    +为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。 -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!",...

    MyLittlePlayer

    向事件添加回调功能 更改addElements函数,添加到默认图层 按选项值显示/隐藏元素 将自动停止默认值更改为true 修复chrome中的img预加载 用法 var mlp = new Mlp({ loadCss: true, //Auto load images and set ...

    Tcl_TK编程权威指南pdf

    回调与名字空间 内省(introspection) namespace命令 转换现有的软件包以使用名字空间 [incrtcl]对象系统 注意事项 第15章 国际化(internationalization) 字符集与编码 消息目录 第16章 事件驱动的编程 ...

    kkRoute:一个简单的路由系统 for kk

    kkRoute 一个简单的路由系统 for kk 约定 路由地址是类似路径的字符串,...onPreload: 进入自身时,需要预加载东西,就在本函数内实现。 onEnter: 初始化 onLeave: 要离开本处理器,把用到的东西都释放了。 公开API Ro

    preact-async-route:预设路由器的异步路由组件

    提供了类似的道具,可以将延迟加载的组件作为对组件的Promise解决方案来返回,或者在回调中返回该组件。 也有一个加载道具,您可以在延迟加载组件时将要显示的组件传递给该组件。 版本2.0 版本2.0带来了对新道具...

Global site tag (gtag.js) - Google Analytics