多种js图片预加载实现方式分享


Posted in Javascript onFebruary 19, 2016

图片预加载有大体有几种方式

 1.html标签或css加载图片

显而易见我们使用img标签或者通过标签的background-image属性都可以实现图片的预加载。但是为了避免初次载入过多图片影响体验。一般最好在文档渲染完成以后再加载(使用window.onload等)。

 2.纯js实现预加载

空城计-Code记的Javascript实现图片的预加载的完整实现的预加载实例为

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
    }
  }
}

原理就是循环创建Image对象,并设置对象的src为指定图片,然后监听图片加载完成onload = function(){imageloadpost()},当图片加载完成后就会执行到imageloadpost。原来IE6还有一个问题:如果预加载的图片已经在内存中则不会再次出发img.onload事件。但是IE7+都没有问题了。其他浏览器也没有问题,所以上面这种img.onload监听事件已经没有兼容问题了。

 3.Ajax实现预加载

ajax请求是任何数据都可以请求的,图片也不例外。先看一下js/css预加载

// XHR to request a JS and a CSS 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', 'http://domain.tld/preload.js'); 
    xhr.send(''); 
    xhr = new XMLHttpRequest(); 
    xhr.open('GET', 'http://domain.tld/preload.css'); 
    xhr.send('');

而图片的ajax预加载实际和纯js预加载图片一样

new Image().src = "http://domain.tld/preload.png";

只不过这里的解释成了ajax加载,可以理解new Image都是ajax get请求。

以上就是本文的全部内容,希望对大家理解js图片预加载有所帮助。

Javascript 相关文章推荐
List Installed Hot Fixes
Jun 12 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
Jan 26 Javascript
jQuery性能优化技巧分析
Feb 20 Javascript
分享9点个人认为比较重要的javascript 编程技巧
Apr 27 Javascript
js实现带圆角的两级导航菜单效果代码
Aug 24 Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 Javascript
JS使用eval()动态创建变量的方法
Jun 03 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
Apr 11 Javascript
js实现上传图片并显示图片名称
Dec 18 Javascript
关于引入vue.js 文件的知识点总结
Jan 28 Javascript
解决vue请求接口第一次成功,第二次失败问题
Sep 08 Javascript
WebWorker 封装 JavaScript 沙箱详情
Nov 02 Javascript
JS实现1000以内被3或5整除的数字之和
Feb 18 #Javascript
ECharts仪表盘实例代码(附源码下载)
Feb 18 #Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
Feb 18 #Javascript
用canvas 实现个图片三角化(LOW POLY)效果
Feb 18 #Javascript
Js实现简单的小球运动特效
Feb 18 #Javascript
JavaScript与jQuery实现的闪烁输入效果
Feb 18 #Javascript
js实现简单的省市县三级联动效果实例
Feb 18 #Javascript
You might like
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
多广告投放代码 推荐
2006/11/13 Javascript
二叉树的非递归后序遍历算法实例详解
2014/02/07 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
Vue组件选项props实例详解
2017/08/18 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
Python 调用DLL操作抄表机
2009/01/12 Python
Python中unittest用法实例
2014/09/25 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
深入浅析Python字符编码
2015/11/12 Python
python中模块查找的原理与方法详解
2017/08/11 Python
Python实现句子翻译功能
2017/11/14 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
python实现淘宝购物系统
2019/10/25 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
浅谈Python 函数式编程
2020/06/20 Python
python绘制高斯曲线
2021/02/19 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
火车的故事教学反思
2014/02/11 职场文书
街道社区活动报告
2015/02/05 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
股东协议书范本2016
2016/03/21 职场文书
Django+Celery实现定时任务的示例
2021/06/23 Python