多种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 相关文章推荐
JQuery从头学起第二讲
Jul 04 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
Apr 15 Javascript
js获取当前页面的url网址信息
Jun 12 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
Oct 30 Javascript
常用javascript表单验证汇总
Jul 20 Javascript
zTree插件下拉树使用入门教程
Apr 11 Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 Javascript
Vue数据驱动模拟实现1
Jan 11 Javascript
jQuery实现验证码功能
Mar 17 Javascript
vue.js实现备忘录功能的方法
Jul 10 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
Feb 19 Javascript
Vue+Vant 图片上传加显示的案例
Nov 03 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
utf8的编码算法 转载
2006/12/27 Javascript
又一个小巧的图片预加载类
2007/05/05 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
工作中常用到的ES6语法
2018/09/04 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Django框架安装方法图文详解
2019/11/04 Python
基于python实现坦克大战游戏
2020/10/27 Python
美国校服网上商店:French Toast
2019/10/08 全球购物
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
营业员实习自我鉴定
2013/12/07 职场文书
4s店机修工岗位职责
2013/12/20 职场文书
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
2014年人事科工作总结
2014/11/19 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL