多种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初学困境—js初学
Dec 29 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
Jun 13 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
Jul 01 Javascript
各种页面定时跳转(倒计时跳转)代码总结
Oct 24 Javascript
JavaScript模块随意拖动示例代码
May 27 Javascript
AngularJS表单详解及示例代码
Aug 17 Javascript
Boostrap基础教程之JavaScript插件篇
Sep 08 Javascript
Vue.directive自定义指令的使用详解
Mar 10 Javascript
微信小程序使用navigateTo数据传递的实例
Sep 26 Javascript
详解vue项目中使用token的身份验证的简单实践
Mar 08 Javascript
Vue.directive 实现元素scroll逻辑复用
Nov 29 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
Jul 14 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
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
本科毕业生自我鉴定
2013/11/02 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
文秘应届生求职信
2014/07/05 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
演讲比赛主持词
2015/06/29 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
Python爬取某拍短视频
2021/06/11 Python
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
关于Python中进度条的六个实用技巧分享
2022/04/05 Python
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers
Spring中的@Transactional的工作原理
2022/06/05 Java/Android