图片预加载

HTML5学堂:2014年年初的时候,曾经在自己的博客“独行冰海”里写过关于图片预加载和懒加载的博文,当时的文章当中没有写什么关于预载的代码范例,当前打算把预载和懒载分开,讲解的再详细一些。本文主要讲解了图片预载是什么,为何使用预加载,使用预加载的好处以及具体的代码实现。

图片预加载是什么

让浏览区先显示其他的图片(一般使用LOGO)给浏览者看,等图片加载完了之后,再将图片显示。

还有一种更为常见的预载,就是我们随处可见的loading条~~~在我们等待着loading条走完时,内容已经开始加载了~!

为何要用图片预加载

提前加载图片,当用户需要查看时可直接从本地缓存中渲染、可能因为图片很大,浏览器显示出它会用很长的时间,这样浏览者可能以为图片预览慢而没兴趣浏览,把网页关掉,这时,就需要图片预加载。

图片预加载的好处,在于有良好的用户体验。图片预加载主要针对非icon类的图片。

图片预加载的基本原理(即实现方法)

实现预载的方法可以用CSS(background)、JS(Image)。最常用的是JS方法中的new Image();

方法1 使用CSS中的background

设置如下样式: #preload_1 { background: url(要加载图片的名称.png) no-repeat -9999px -9999px; }

之后,将选择器应用到HTML元素中,我们便可通过CSS的background属性将图片预加载到屏幕外的背景上。只要这些图片的路径保持不变,当它们在WEB页面的其他地方被调用时,浏览器就会在渲染过程中使用预加载(缓存)的图片。简单、高效,不需要任何JavaScript。

使用该方法加载图片会存在一定的问题:由于CSS是同页面的其他内容一起加载,这也就意味着增加了页面的整体加载时间。

此处,可以使用JS配合,动态的改变style.background倒是可以让图片加载延迟一些(在加载页面之后)执行。

方法2 JavaScript中的new Image()方法【推荐】

基本步骤:

1 使用new Image()动态的创建img

2 设置其src为要加载的图片,来实现预载。

3 使用onload方法回调预载完成事件(也就是当预载完成之后,执行想要的操作)。

只要浏览器把图片下载到本地,同样的src就会使用缓存,这是最基本也是最实用的预载方法。

另外,当Image下载完图片后,会得到宽和高,因此也可以在预载前得到图片的大小(可以用计时器轮循宽高变化)。

图片预载的代码实现

var loadImg = []; // 创建一个数组,用于存储所有要预加载的图片路径

// 通过push方法,将

loadImg.push('h5course(1).jpg');

loadImg.push('h5course(2).jpg');

loadImg.push('h5course(3).jpg');

loadImg.push('h5course(4).jpg');

loadImg.push('h5course(5).jpg');

loadImg.push('h5course(6).jpg');

loadImg.push('h5course(7).jpg');

loadImg.push('h5course(8).jpg');

var imgsNum = loadImg.length;

var nowNum = 0;

var nowPercentage = 0; // 用于显示加载每一张图片之后,能够给出百分比

// 通过for循环,针对loadImg整个数组进行遍历

for (var i = 0; i < imgsNum; i++) {

// 每一次i变化之后,都需要执行这样的内容 - 创建一个img对象,将img对象的src设置为相应的图片地址

var newImg = new Image();

newImg.src = loadImg[i];

// 每一张图片加载完成之后,都可以执行相应的功能,比如我们在制作loading条时,希望每加载一张图片之后就能够将当前进度显示出来,就可以用这个方法

newImg.onload = (function() {

// 一张图片加载完毕之后执行的功能 - 通常是为了控制进度条

nowNum++;

if (nowNum == imgsNum) {

// 加载完成一张图片之后,我们还可以判断是否完成了所有图片的加载,如果完成再执行相应的内容

};

nowPercentage = nowNum / imgsNum * 100;

console.log(nowPercentage + '%');

})();

};

关于要说的,利利都已经备注在代码当中了~~~

Tips:注意一点,如果是本地测试,请启动服务器(在wamp当中运行)。

对于wamp不是很了解的,在此简要介绍一下,wamp是服务器集成环境,想要安装以及配置的,可以点击此处——>wamp的配置与安装。如果您使用微信公众号,想要查看wamp的信息,可以直接发送“wamp”到“HTML5学堂”的微信。

HTML5小编-利利 耗时5h

欢迎沟通交流~HTML5学堂

HTML5学堂微信~欢迎扫码关注

android调用h5预加载图片,图片预加载 preload相关推荐

  1. android调用h5预加载图片,使用HTML5的页面资源预加载(Link prefetch)功能加速你的页面加载速度...

    不管是浏览器的开发者还是普通web应用的开发者,他们都在做一个共同的努力:让Web浏览有更快的速度感觉.有很多已知的技术都可以让你的网站速度变得更快:使用CSS sprites,使用图片优化工具,使用 ...

  2. Android与H5相互接口调用及Android端接口整理

    近几年随着HTML5的功能越来越强大,H5页面的性能虽然稍差,单其灵活性很高,更新页面成本比原生小很多,一个页面可以被android和ios同时使用开发成本也比较低,所以移动端的开发已经不是单单的原生 ...

  3. android 和h5交互,Android中与H5的交互

    Android日常开发中,常常会遇到加载H5页面的情况,于是少不了与H5页面的交互问题.具体表现在Android调用H5代码及H5中调用Android代码两种情况. 测试页面 test.png 这里我 ...

  4. Android 系统(229)---Android与h5交互专题

    [Android开发进阶系列]Android与h5交互专题 1 交互原理 1.1 webview如何加载H5页面 我们都知道在Android中是通过webView来加载html页面的,根据HTML文件 ...

  5. Android 与 H5 数据的传递

    最近项目开发使用了 Android 原生和 H5 的混合开发,以前也没怎么接触过.所以这次和 H5 联调对接还是踩了很多坑,这里也做个总结希望可以帮助到大家... 首先 Android 和 H5 主要 ...

  6. Android与H5(JS)互调

    1.Android调用H5(JS) 1.1.新建assets资源目录并将准备好的HTML页面放入其中 (真实项目中HTML页面放在Tomcat中启动) 1.2.初始化webView并加载HTML页面 ...

  7. 关于原生android与H5交互的方法

    文章目录 原生android与H5交互 android调用H5方法 H5调用android 原生android与H5交互 前面讲解方法,结尾放代码 android调用H5方法 首先需要一个WebVie ...

  8. 微信H5资源预加载(图片、字体)

    一.背景 微信活动H5页面的特点之一就是资源多(图.字体.音频等),动不动就几十兆.庞大的资源量很可能导致页面不流畅.如下图,因为背景图还没加载完,进入第二页时会有一瞬间"白屏". ...

  9. 移动端h5图片加载问题,预加载、div标签替换img

    在开发移动端h5时遇到图片加载不出来的问题,分为大图片和小图片(打包base64区分) 大图片加载解决办法:reload预加载 小图片加载解决办法:div标签替换为img标签 特殊情况: div标签按 ...

最新文章

  1. easyUI清除序号
  2. vue seo关键词设置_网站SEO常用优化技巧
  3. python3项目-python3项目
  4. JVM内存参数详解以及配置调优
  5. Altium designer中高亮元器件或网络时对比度调节
  6. BZOJ1996:[HNOI2010]CHORUS 合唱队(区间DP)
  7. 在WebRTC上实现ML Kit笑容检测
  8. Git之怎么通过命令修改前面几次提交的记录
  9. [转贴]JAVA:RESTLET开发实例(三)基于spring的REST服务
  10. 学习web前端开发大半年,迷茫了,感觉什么都没学会怎么破?
  11. Redis报错#MISCONF Redis is configured to save RDB snapshots, but is currently not
  12. mysql 清理表碎片需要停止数据库吗_Mysql的表的碎片清理
  13. 网络调试助手简单使用教程(CM精装版V3.8.2)
  14. SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)
  15. Android自定义View里面获取宽高及dp和px间的转换
  16. 最强GTD时间管理工具(OmniFocus Pro 3)能干些什么?支持big sur
  17. 小米笔记本“突然”不能调整屏幕亮度
  18. 5 打印选课学生名单 (25分)
  19. 离散数学序关系求解最大/小元,极大/小元,上/下届,上/下确界
  20. 妈蛋,这玩意还真不得不会!

热门文章

  1. 百度Apollo7.0中的路由段是什么
  2. Codeforces Round #676 (Div. 2) A - D个人题解(E题待补)
  3. 解析PTA浙大版《C语言程序设计(第3版)》习题4-10 猴子吃桃问题
  4. 如何解决 安装Vmware报msi安装包有问题
  5. 通过matlab对比UFMC和OFDM的频谱,星座图
  6. python linux磁盘空间_Linux 查看磁盘空间
  7. 车载蓝牙通话前声道才有声音背后的原因
  8. 【HiFlow】解决通知群经常发通知的麻烦
  9. MSP430G2452IPW20R
  10. win10无法完全关机,无法彻底关机,无法正常休眠的问题,解决过程。