原标题:网页加载进度条实现方案

这次源码时代H5学科老师跟大家一起来总结下在web应用中常见的加载进度条实现方案。

随着html5的普及,各种css3动画及js特效在网页中也是层出不穷,PC端加载数据的速度还是比较快的,但是对于移动端设备而言则相对要慢不少,如果图片或者脚本没有加载完,用户在操作中就可能发生各种问题,因此我们需要对数据加载进行侦测,以更加人性化的方法将网页程序内容展现给用户,实现更佳的用户体验。

先说一下整体的实现思路吧,常见的效果是将进度条的dom结构显示在页面最“前”(使用fixed定位 + 高z-index,提高优先级),主体内容相当于是被“隐藏”(实际是被遮盖)了,所以进度条一打开网页就有了,当网页内容全部加载完成后,触发js相关事件,执行回调函数:隐藏进度条的同时显示页面主体内容。

【1. 定时器模拟制作进度条】

很多同学会使用定时器的方式实现网页进度条,通常可以设置延迟3到5秒钟的时间后来显示网页内容,这样的确可以模拟出进度条的加载效果,不过这种方式会有一些问题,比如当前页面已经打开过了,浏览器中会有缓存数据,再次开启页面定时器依然会执行,反而会影响加载性能,原本可以“瞬间”完成的内容加载,现在由于定时器的原因也需要等待。还有一个就是在网络情况比较糟糕的情况下,很有可能3到5秒钟的时间也未必能够加载完成网页内容,这个时候定时器加载又显得比较鸡肋了。

示例代码参考:load1.html

样式:

*{

margin: 0;

padding: 0;

}

#Loading{

position: fixed;

width: 100%;

height: 100%;

background-color: orange;

color: #fff;

font-size: 40px;

text-align: center;

line-height: 10;

}

结构:

loading...
Hello world

交互:

<>

var load_page = document.querySelector("#Loading");

setTimeout(function(){

load_page.style.display = "none";

}, 3000)

>

小结:

1. 定时器模拟制作进度条只能是视觉表现上的实现,而非真正意义上的解决方案。

【2. 通过加载状态事件制作进度条】

javascrip提供了相关事件机制可以监控页面的加载情况,我们可以通过加载状态事件实现进度条的制作,可以使用window.事件,等到页面中全部内容包括图片加载完成后才会被触发,或者使用document.onReadyStateChange事件,在ReadyStateChange事件中可通过自变量事件参数获取到页面加载的当前状态,分为5项内容:

Uninitialized:未初始化

Loading:载入

Loaded:载入完成

Interactive:交互

Completed:完成

而js通过ReadyStateChange事件可以获取到的仅为后2项状态,不过对于我们的代码实现而言仅仅只需要最后一个完成状态即可。

示例代码参考:load2.html(样式代码同load1.html)

结构:

loading...

Hello world

交互:

<>

var load_page = document.querySelector("#Loading");

document.onreadystatechange = function(e){

if(e.target.readyState === "complete"){

load_page.style.display = "none";

}

}

>

小结:

1. 通过加载状态事件(window.或document.onreadystatechange)制作进度条,可真正意义上实现页面加载效果。

【3. 实时获取加载数据制作进度条】

通过加载状态事件制作进度条,可真正意义上实现页面加载效果,但是无法显示当前加载进度,当内容加载完成后直接就显示出了落地页,过程中缺少了加载进度提示,实际上对于网页而言加载图片之类的二进制资源文件是最大的加载开销,所以通常来讲图片资源往往是最后加载完成的,其加载行为本身又是异步的,所以我们可以通过图片自身的load事件判定其是否加载完成,执行回调函数实时计算加载进度,模拟实时获取加载数据进度条效果。

示例代码参考:load3.html(样式代码同load1.html)

结构:

loading...

0%

Hello world

交互:

<>

var load_page = document.querySelector("#Loading"),

h2 = document.querySelector("h2"),

imgs = document.querySelectorAll("img"),

imgs_len = imgs.length,

loaded = 0,

load_callback = function(){

loaded++;

h2.innerHTML = parseInt(loaded/imgs_len*100) + "%";

if(loaded === imgs_len) load_page.style.display = "none";

};

for(var i=0; i

if(imgs[i].complete == true){//图片已加载完成

load_callback();

}else{

imgs[i]. = function(){//图片动态加载完成触发

load_callback();

}

}

}

>

网站资源扩展:

1. 动画图标资源:www.loading.io

2. GIF预加载图标资源:www.preloaders.net

感谢源码时代H5学科讲师提供此文章!

本文为原创文章,转载请注明出处(http://www.itsource.cn)!返回搜狐,查看更多

责任编辑:

html 实现页面加载进度,网页加载进度条实现方案相关推荐

  1. php网页有图片加载慢,网页加载加速 之 图片延迟加载

    [导读]大家还在为网页加载速度而烦恼吗?大家有发现网页在某些浏览器很快,而在某些浏览器却很慢吗?今天向大家介绍一下为何会出现这些情况,并给大家分享一下具体的实现方法 大家还在为网页加载速度而烦恼吗?大 ...

  2. iOS-仿支付宝加载web网页添加进度条

    代码地址如下: http://www.demodashi.com/demo/11727.html 目前市场上APP常会嵌入不少的h5页面,参照支付宝显示web页面的方式, 做了一个导航栏下的加载进度条 ...

  3. php 页面加载进度条,HTML5/CSS3 网页加载进度条的实现,下载进度条等经典案例

    今天给大家带来一个比较炫的进度条,进度条在一耗时操作上给用户一个比较好的体验,不会让用户觉得在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务 ...

  4. WebView之加载网页时增加进度提示

    上一节讲了一些webview的基本使用以及在记载网页时如何屏蔽掉第三方浏览器,使我们自己开发的程序成为一个微型浏览器.那么这一节将一下在webView加载网页的过程中如何加上进度提示.效果图如下: 主 ...

  5. android动态设置错误页面,Android中替换WebView加载网页失败时的页面

    我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示: 上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难 ...

  6. C#实现网页加载后将页面截取成长图片 | Playwright版

    前言 如何将网页生成预览图? 要实现这个功能,可以用WebBrowser组件模拟浏览器,或者使用系统浏览器访问网页,再进行截图操作. 但是,这样需要编写大量的控制代码. 工欲善其事,必先利其器! 利用 ...

  7. Android之解决webview加载第三方网页点击弹不出下拉框(html页面里面的select标签)

    1 问题 决webview加载第三方网页点击弹不出下拉框(html页面里面的select标签),我们访问youtube.com官网,点击网站的视频,点击视频右上角三个点设置,然后点击 播放设置 然后点 ...

  8. c# 实现网页加载后将页面截取为长图片

    背景 最近再做一个需求,需要对网页生成预览图,如下图 但是网页千千万,总不能一个个打开,截图吧:于是想着能不能使用代码来实现网页的截图.其实要实现c#教程这个功能,无非就是要么实现一个仿真浏览器,要么 ...

  9. android 加载静态网页,React Native:如何在WebView内加载SPA或本地静态HTML页面?

    React Native:如何在WebView内加载SPA或本地静态HTML页面? React Native WebView允许你使用uri属性加载可公开访问的资源,就像程序内的一个浏览器.但是,当你 ...

  10. linux优化网页加载过程,HTML页面加载和解析流程 介绍

    1.浏览器加载和渲染html的顺序 1.1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的. 1.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相 ...

最新文章

  1. 三天学会Selenium,阿里p7精心整理自动化测试Selenium大礼包
  2. datatable 前台和后台数据格式
  3. SharePoint:扩展DVWP - 第21部分:实现可维护的三级联动下拉框
  4. python array函数_Python 中的range()函数与array()函数
  5. linux查询文件存储格式,蜗牛哥:Linux中查看文件内容,5种常用查看方式
  6. WPS 连接 H2 Database
  7. CocosCreator之层级管理器
  8. 直播平台源代码快速搭建视频直播平台
  9. 忽然想起你,你在远方还好吗!
  10. Codeforces 1389 C. Good String(枚举)
  11. 雷声大雨点小:Bakkt「见光死」了吗?
  12. python处理图片水印
  13. PHP微信扫码关注公众号并授权登录源码
  14. 2015款Mac笔记本安装Windows10系统到外置移动硬盘教程
  15. python监控端口_python监控设备端口示例
  16. 阿里云短信服务isv.INVALID_PARAMETERS返回,短信发送失败
  17. 增量学习方法分类及近两年论文汇总
  18. C#获取系统空闲时间
  19. 銀織の雷使い(プレメア) / 银雷(异时层机娘)
  20. 使用PowerDesigner画ER图详细教程

热门文章

  1. 中国大陆收货地址智能解析API
  2. linux 使用ACR122U-A9设备读写M1卡
  3. Windows 7集成IE11(离线安装包、补丁)
  4. phpstudy安装及简单使用教程
  5. 微服务框架自带uuid生成器
  6. linux运行getch吗,怎么样在linux下,实现getch函数功能
  7. 2021ACA世界大赛线上全球总决赛,绽放中国创意设计色彩
  8. LeetCode 程序员面试宝典
  9. java电表抄表器接口_远程抄表系统接线图和远程抄表电表安装图及实例
  10. cb使用msagent