多种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 字符串操作函数
Jul 25 Javascript
Js event事件在IE、FF兼容性问题
Jan 01 Javascript
JavaScript之HTMLCollection接口代码
Apr 27 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
对js关键字命名的疑问介绍
Apr 25 Javascript
详细分析使用AngularJS编程中提交表单的方式
Jun 19 Javascript
jQuery实现图片左右滚动特效
Apr 20 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
Angularjs实现下拉框联动的示例代码
Aug 22 Javascript
vue实现模态框的通用写法推荐
Feb 26 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 Javascript
原生js实现点击轮播切换图片
Feb 11 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入门之常量简介和系统常量
2014/05/12 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
2018/08/31 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
深入分析jQuery.one() 函数
2020/06/03 jQuery
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
python生成验证码图片代码分享
2016/01/28 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
Python之reload流程实例代码解析
2018/01/29 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
python实现图片识别汽车功能
2018/11/30 Python
linux环境下Django的安装配置详解
2019/07/22 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
电力公司个人求职信范文
2014/02/04 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
小学生评语集锦
2014/04/18 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
电视新闻稿
2015/07/17 职场文书
体育教师教学随笔
2015/08/15 职场文书