详细说明常见的几种网页进度条,及如何判断页面已经加载完毕
1. 文章引言
我们通常会使用gif
动态图,来展示页面的加载效果,如下gif
所示:
因而,推荐一个自动生成gif
图标的网站链接:https://icons8.com/preloaders/,点击进去如下图所示:
鼠标向下滑动,找到gif
图片集,如下图所示:
在里面挑选好加载的效果图以后,点击下载,如下图所示:
下载完成以后把gif
图片保存到你项目的img
文件夹中,方便使用。
2. loading方法
2.1 直接使用定时器
这种方法相对简单,如下代码代码所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>常见的网页进度条1</title>
<style>
.loading {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 100;
background-color: #fff;
}
.loading .pic {
width: 64px;
height: 64px;
background: url(imgs/loading.gif);
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
margin: auto;
}
</style>
<script src="../js/jquery-3.4.1.js"></script>
<script>
$(function () {
//可使用jquery动态添加遮罩及loading效果
// var loading = '<div class="loading"><div class="pic"></div></div>';
//$("body").append(loading);
//启动一个定时器
setInterval(function () {
$(".loading").fadeOut();//3秒之后影藏
}, 3000)
})
</script>
</head>
<body>
<div class="loading">
<div class="pic"></div>
</div>
<p>使用定时器的方法(不会判断页面加载,只是在定时器完成之后将也面显示出来)</p>
<img src="./imgs/风景1.jpg" alt="风景1"/>
<img src="./imgs/风景2.jpg" alt="风景2"/>
<img src="./imgs/风景3.jpg" alt="风景3"/>
<img src="./imgs/风景4.jpg" alt="风景4"/>
<img src="./imgs/风景5.jpg" alt="风景5"/>
<img src="./imgs/风景6.jpg" alt="风景6"/>
<img src="./imgs/风景7.jpg" alt="风景7"/>
<img src="./imgs/风景8.jpg" alt="风景8"/>
</body>
</html>
这种方法是直接给一个时间,等结束以后,加载效果消失。
但这种方法,并不能判断页面是否已经加载完毕。虽然简单粗暴,但显然这并不是我们想要的结果。
2.2 根据页面是否加载完毕来关闭loading效果
首先,咱们要想知道页面是否加载完毕,需要知道以下几点:
-
document.onreadystatechange
加载状态改变时的事件 -
document.readyState
当前文档的状态-
.uninitialized
还未开始载 -
.loading
载入中 -
.interactive
已加载,文档和永和可以开始交互 -
.complete
载入完成
-
我们不使用定时器的方法,直接来判断页面是否加载完毕,去决定loading
效果的关闭与否,那么直接将上述代码中的js
修改为:
<script>
document.onreadystatechange = function () {//即在加载的过程中执行下面的代码
if (document.readyState == "complete") {//complete加载完成
$(".loading").fadeOut();
}
}
</script>
我们用到最多的方法就是此方法,因为,它能判断出来页面是否真的已经加载完毕。
2.3 用css3做进度条的效果
如上两个方法都是用的gif
图,我们使用css3
怎么来实现加载额效果呢?这个要用transform
属性以及animation
动画,如下代码所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>使用css3加载页面</title>
<style type="text/css">
.loading {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 100;
background-color: #fff;
}
.loading .pic {
width: 50px;
height: 50px;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
margin: auto;
}
.loading .pic i {
display: block;
float: left;
width: 6px;
height: 50px;
background-color: #399;
margin: 0 2px;
transform: scaleY(.4);
animation: load 1.2s infinite;
}
.loading .pic i:nth-child(1) {
}
.loading .pic i:nth-child(2) {
animation-delay: .1s;
}
.loading .pic i:nth-child(3) {
animation-delay: .2s;
}
.loading .pic i:nth-child(4) {
animation-delay: .3s;
}
.loading .pic i:nth-child(5) {
animation-delay: .4s;
}
@keyframes load {
0%, 40%, 100% {
transform: scaleY(.4);
}
20% {
transform: scaleY(1);
}
}
</style>
</head>
<body>
<div class="loading">
<div class="pic">
<i></i>
<i></i>
<i></i>
<i></i>
<i></i>
</div>
</div>
</body>
</html>
实现效果如下图所示:
写好这些以后,动画就已经产生了。
接下来,可将第二种方法的js
粘贴过来,即如下代码:
<script>
document.onreadystatechange = function () {//即在加载的过程中执行下面的代码
if (document.readyState == "complete") {//complete加载完成
$(".loading").fadeOut();
}
}
</script>
这就达到了用css3
来实现页面加载的一个动画效果了。
2.4 实时获取加载数据
此外,还有一种加载方式,即实时获取加载数据,就是百分数的那种效果,如下代码所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>实时加载数据</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
.loading {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 100;
background-color: #fff;
}
.loading .pic {
width: 100px;
height: 100px;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
margin: auto;
font-size: 30px;
text-align: center;
line-height: 100px;
}
.loading .pic span {
display: block;
width: 80px;
height: 80px;
position: absolute;
top: 10px;
left: 10px;
border-radius: 50%;
box-shadow: 0 3px 0 #666;
animation: rotate 1s infinite linear;
-webkit-animation: rotate 1s infinite linear;
}
@-webkit-keyframes rotate {
0% {
-webkit-transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
}
}
@keyframes rotate {
100% {
transform: rotate(360deg);
}
}
;
</style>
</head>
<body>
<div class="loading">
<div class="pic">
<span></span>
<b>0%</b>
</div>
</div>
<img class="imgs" src="./imgs/风景1.jpg" alt="风景1"/>
<img class="imgs" src="./imgs/风景2.jpg" alt="风景2"/>
<img class="imgs" src="./imgs/风景3.jpg" alt="风景3"/>
<img class="imgs" src="./imgs/风景4.jpg" alt="风景4"/>
<img class="imgs" src="./imgs/风景5.jpg" alt="风景5"/>
<img class="imgs" src="./imgs/风景6.jpg" alt="风景6"/>
<img class="imgs" src="./imgs/风景7.jpg" alt="风景7"/>
<img class="imgs" src="./imgs/风景8.jpg" alt="风景8"/>
<script src="../js/jquery-3.4.1.js"></script>
<script>
$(function () {
var img = $(".imgs");//首先获取所有的Img对象
var num = 0;//定义一个变量,赋值给b标签用
img.each(function (i) {//遍历获取到的所有img
var oImg = new Image();//new一个新对象
oImg.onload = function () {//使用onload方法,在加载完成后执行
oImg.onload = null;//首先清除掉缓存
num++;//每次加载的过程中num++,即执行次数
$(".loading b").html(parseInt(num / img.length * 100) + "%");//改变b标签的内容,用num除以img的个数,再乘以100,再取整,这就是加载的百分数
if (num >= i) {
$(".loading").fadeOut();//当num的值大于等于个数时隐藏
}
}
oImg.src = img[i].src;//预加载,先指定一个img.src,当onload成功以后可以将数据指定到某一个元素或者图片上,或者返回一个结果
})
})
</script>
</body>
</html>
这种效果,在页面中也比较常见,也是用css3
做的,效果如下图:
3. 文末总结
具体使用哪种方式,动态加载页面,可以根据项目需求来。
相关文章
- Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
- selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?
- C# Json反序列化 C# 实现表单的自动化测试<通过程序控制一个网页> 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案) 大话设计模式:原型模式 C# 深浅复制 MemberwiseClone
- 如何在CentOS上面安装“CentOS网页面板”
- 如何使用curl进行网页授权
- 网页图表Highcharts实践教程之标签组与载入动画
- 【快应用】H5快应用Web组件打开的网页出现跨域问题如何解决?
- IE网页被缓存,get接口缓存
- 《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——1.8 网页配色技巧
- 《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.5 创建文字
- 移动网页如何实现发送短信和拨打电话的功能
- 如何在 JavaScript 中获取当前网页的协议和页面路径?
- Three.js教程之在网页快速实现 3D效果(教程含源码)
- 学生个人网页制作成品
- Web网页服务器软件——介绍
- 如何将网页挂载github上
- 一步一步搭建前端监控系统:如何将网页截图上报?
- 【快应用】webview接口打开网页,网页会被自动放大,如何适配手机大小
- Python 框架 之 Django 如何取消404错误的调试界面,设置自己的网页404找不到界面(网页正式发布时候使用)
- ESP8266动态网页设置网络连接
- 网页中的公式在翻译时如何被保留下来?
- docker 将网页部署到 tomcat
- 如何查看谷歌浏览器保存的网页密码