jQuery简单实现图片预加载


Posted in Javascript onApril 20, 2015

jQuery实现图片预加载

JS代码

$(function(){
   loadImg("http://d.hiphotos.baidu.com/image/pic/item/fd039245d688d43f14f69eff7f1ed21b0ef43b5b.jpg",addImg);
  function loadImg(url,callback){
    var img = new Image();
    img.onload = function(){
      img.onload = null;
      callback(img);
    }
    img.src=url;
    img.width ="202";
    img.height = "202";
    img.attr("defaulturl","../images/img.png");
    if(){}
  }
  function addImg(img){
    $(img).appendTo($(".imgload li"))
  }
})

HTML:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>图片预加载</title>
  <link rel="stylesheet" type="text/css" href="css/index.css">
  <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
  <script type="text/javascript" src="js/index.js"></script>
</head>
<body>
   
    <div class="imgload">
      <ul>
          <li class="fl"></li>
          <li class="fl"></li>
          <li class="fl"></li>
          <li class="fl"></li>
          <li class="fl"></li>
          <li class="fl"></li>
          <li class="fl"></li>
          <li class="fl"></li>
          <li class="fl"></li>
      </ul>
    </div>
</body>
</html>

其他实例

function loadimg(arr,funLoading,funOnLoad,funOnError){ 
  var numLoaded=0, 
  numError=0, 
  isObject=Object.prototype.toString.call(arr)==="[object Object]" ? true : false; 
  
  var arr=isObject ? arr.get() : arr; 
  for(a in arr){ 
    var src=isObject ? $(arr[a]).attr("data-src") : arr[a]; 
    preload(src,arr[a]); 
  } 
  
  function preload(src,obj){ 
    var img=new Image(); 
    img.onload=function(){ 
      numLoaded++; 
      funLoading && funLoading(numLoaded,arr.length,src,obj); 
      funOnLoad && numLoaded==arr.length && funOnLoad(numError); 
    }; 
    img.onerror=function(){ 
      numLoaded++; 
      numError++; 
      funOnError && funOnError(numLoaded,arr.length,src,obj); 
    } 
    img.src=src; 
  } 
  
}

参数说明:
  arr:可以是存放图片路径的一个数组,也可以是选取到的img的jquery对象;
  funLoading:每一个单独的图片加载完成后执行的操作;
  funOnLoad:全部图片都加载完成后的操作;
  funOnError:单个图片加载出错时的操作。

懒加载,

var imgonload=function(errors){ 
    /*errors:加载出错的图片数量;*/ 
  console.log("loaded,"+errors+" images loaded error!"); 
} 
  
var funloading=function(n,total,src,obj){ 
    /* 
    n:已加载完成的数量; 
    total:总共需加载的图片数量; 
    src:当前加载完成的图片路径; 
    obj:当loadimg函数中传入的arr为存放图片路径的数组时,obj=src,是图片路径, 
        当arr为jquery对象时,obj是当前加载完成的img dom对象。 
    */ 
  console.log(n+"of"+total+" pic loaded.",src); 
  var newimg = document.createElement("img"); 
  newimg.src=src; 
  $("body").append(newimg).fadeIn(); 
} 
  
var funloading_obj=function(n,total,src,obj){ 
  console.log(n+"of"+total+" pic loaded.",src); 
  $(obj).attr("src",src); 
  $(obj).fadeIn(200); 
} 
  
var funOnError=function(n,total,src,obj){ 
  console.log("the "+n+"st img loaded Error!"); 
}

调试用例

console.log("loading..."); 
loadimg($("img"),funloading_obj,imgonload,funOnError); 
/*loadimg(["http://pic22.nipic.com/20120619/9607634_212642465144_2.jpg", 
     "http://pic21.nipic.com/20120531/1670912_103610084349_2.jpg", 
     "http://pic21.nipic.com/20120616/4952071_130629530136_2.jpg", 
     "http://pic21.nipic.com/20120610/1723580_105037029000_2.jpg", 
     "http://pic22.nipic.com/20120617/2572038_125013326121_2.jpg" 
    ],funloading,imgonload,funOnError);*/

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JQuery对表单元素的基本操作使用总结
Jul 18 Javascript
javascript实现限制上传文件大小
Feb 06 Javascript
AngularGauge 属性解析详解
Sep 06 Javascript
使用DeviceOne实现微信小程序功能
Dec 29 Javascript
javascript 网页进度条简单实例
Feb 22 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
Apr 19 Javascript
Mint UI 基于 Vue.js 移动端组件库
Nov 07 Javascript
vue弹窗组件的实现示例代码
Sep 10 Javascript
JavaScript创建对象的四种常用模式实例分析
Jan 11 Javascript
实例讲解vue源码架构
Jan 24 Javascript
微信小程序-form表单提交代码实例
Apr 29 Javascript
对layui中table组件工具栏的使用详解
Sep 19 Javascript
jquery滚动到顶部底部代码
Apr 20 #Javascript
浅谈javascript属性onresize
Apr 20 #Javascript
jquery代码实现简单的随机图片瀑布流效果
Apr 20 #Javascript
被遗忘的javascript的slice() 方法
Apr 20 #Javascript
JavaScript Window浏览器对象模型方法与属性汇总
Apr 20 #Javascript
分享10个原生JavaScript技巧
Apr 20 #Javascript
JQuery限制复选框checkbox可选中个数的方法
Apr 20 #Javascript
You might like
php调用mysql数据 dbclass类
2011/05/07 PHP
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
php分页函数完整实例代码
2014/09/22 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
js 覆盖和重载 函数
2009/09/25 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
python 文件转成16进制数组的实例
2018/07/09 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
ipad上运行python的方法步骤
2019/10/12 Python
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
公司员工检讨书
2014/02/08 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
vscode内网访问服务器的方法
2022/06/28 Servers
Python如何加载模型并查看网络
2022/07/15 Python