多种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 相关文章推荐
JavaScript中null与undefined分析
Jul 25 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 Javascript
js 与 php 通过json数据进行通讯示例
Mar 26 Javascript
javascript实现的右下角弹窗实例
Apr 24 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
Jun 23 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
Nov 25 Javascript
Angular2学习教程之ng中变更检测问题详解
May 28 Javascript
微信小程序实现页面跳转传值的方法
Oct 12 Javascript
聊聊JS动画库 Velocity.js的使用
Mar 13 Javascript
Vue中的v-for指令不起效果的解决方法
Sep 27 Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
Sep 25 Javascript
Vue 自适应高度表格的实现方法
May 13 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
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
学习python 之编写简单乘法运算题
2016/02/27 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
python实现解数独程序代码
2017/04/12 Python
深入理解Python中的内置常量
2017/05/20 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
python如何重载模块实例解析
2018/01/25 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
如何在sublime编辑器中安装python
2020/05/20 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
学生就业推荐信
2013/11/13 职场文书
后勤主管工作职责
2013/12/07 职场文书
防灾减灾标语
2014/10/07 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
飞屋环游记观后感
2015/06/08 职场文书
Mysql 用户权限管理实现
2021/05/25 MySQL