多种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 Archive Network 集合
May 12 Javascript
理解Javascript_02_理解undefined和null
Oct 11 Javascript
javascript中简单的进制转换代码实例
Oct 26 Javascript
深入理解javascript的执行顺序
Apr 04 Javascript
微信小程序 教程之WXML
Oct 18 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
Oct 30 Javascript
基于JavaScript实现图片剪切效果
Mar 07 Javascript
深入解析js轮播插件核心代码的实现过程
Apr 14 Javascript
详解Vue-cli 创建的项目如何跨域请求
May 18 Javascript
微信小程序富文本渲染引擎的详解
Sep 30 Javascript
AngularJS中的路由使用及实现代码
Oct 09 Javascript
细说webpack源码之compile流程-入口函数run
Dec 26 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来检测proxy
2006/10/09 PHP
php获取地址栏信息的代码
2008/10/08 PHP
php smarty的预保留变量总结
2008/12/04 PHP
php json_encode()函数返回json数据实例代码
2014/10/10 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
python计算对角线有理函数插值的方法
2015/05/07 Python
Python Requests安装与简单运用
2016/04/07 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
python全局变量引用与修改过程解析
2020/01/07 Python
python中的itertools的使用详解
2020/01/13 Python
什么是Python中的顺序表
2020/06/02 Python
Python远程方法调用实现过程解析
2020/07/28 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
什么是servlet
2012/05/08 面试题
护士个人自我鉴定
2014/03/24 职场文书
2014年度党员自我评议
2014/09/13 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
2015初中团委工作总结
2015/07/28 职场文书
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js
Python序列化模块JSON与Pickle
2022/06/05 Python