多种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实现滑块滑动改变值的实现代码
Apr 12 Javascript
javascript实现TreeView 无刷新展开的实例代码
Jul 13 Javascript
JS实现图片翻书效果示例代码
Sep 09 Javascript
javascript中数组的定义及使用实例
Jan 21 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
JavaScript实战之菜单特效
Aug 16 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
Dec 14 Javascript
JS实现搜索框文字可删除功能
Dec 28 Javascript
Angular ui.bootstrap.pagination分页
Jan 20 Javascript
详解cordova打包成webapp的方法
Oct 18 Javascript
使用Vue 实现滑动验证码功能
Jun 27 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
Jun 16 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/15 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
python实现K最近邻算法
2018/01/29 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
在python中做正态性检验示例
2019/12/09 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
党员公开承诺书范文
2014/03/25 职场文书
劳资协议书范本
2014/04/23 职场文书
给校长的建议书400字
2014/05/15 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
物业总经理助理岗位职责
2014/06/29 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
个人股份合作协议书
2014/10/24 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
2015年教师节慰问信
2015/03/23 职场文书
惊天动地观后感
2015/06/10 职场文书
小学数学国培研修日志
2015/11/13 职场文书
表扬信范文
2019/04/22 职场文书
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js