多种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 相关文章推荐
JS二维数组的定义说明
Mar 03 Javascript
JavaScript中最简洁的编码html字符串的方法
Oct 11 Javascript
node.js中的fs.link方法使用说明
Dec 15 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
May 03 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
vue2.0结合Element实现select动态控制input禁用实例
May 12 Javascript
详解JSON Web Token 入门教程
Jul 30 Javascript
vue中v-for循环给标签属性赋值的方法
Oct 18 Javascript
深入了解JavaScript 私有化
May 30 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
Aug 12 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
Nov 01 jQuery
微信小程序接入腾讯云验证码的方法步骤
Jan 07 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+mysql实现无限分类实例详解
2015/01/15 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
对python 命令的-u参数详解
2018/12/03 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
python小项目之五子棋游戏
2019/12/26 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
经典C++面试题一
2016/11/06 面试题
幼儿园家长会欢迎词
2014/01/09 职场文书
采购主管岗位职责
2014/02/01 职场文书
会计的岗位职责
2014/03/15 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书