多种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图像处理—亮度对比度应用案例
Jan 03 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
Jan 26 Javascript
Javascript中的关键字和保留字整理
Oct 16 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
Dec 21 Javascript
JavaScript和jQuery制作光棒效果
Feb 24 Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
Feb 09 Javascript
使用vue的transition完成滑动过渡的示例代码
Jun 25 Javascript
使用webpack搭建vue项目实现脚手架功能
Mar 15 Javascript
jquery实现图片放大镜效果
Dec 23 jQuery
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
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生成zip文件类实例
2015/04/07 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
PHP连接MySQL数据库三种实现方法
2020/12/10 PHP
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
python删除列表中重复记录的方法
2015/04/28 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
销售经理工作职责范文
2013/12/03 职场文书
金属材料工程个人求职的自我评价
2013/12/04 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
工作疏忽检讨书
2014/01/25 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
教师听课评语大全
2014/12/31 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis