欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CSS制作简单loading动画

程序员文章站 2022-07-25 17:50:02
曾经以为,loading的制作需要一些比较高深的web动画技术,后来发现大多数loading都可以用“障眼法”做出来。比如一个旋转的圆圈,并不都是将gif图放进去,有些就是画个静止图像,然后让它旋转就完了。gif图也可以,但是加载时间比较长。 CSS的animation可以做出大多数的loading ......

  曾经以为,loading的制作需要一些比较高深的web动画技术,后来发现大多数loading都可以用“障眼法”做出来。比如一个旋转的圆圈,并不都是将gif图放进去,有些就是画个静止图像,然后让它旋转就完了。gif图也可以,但是加载时间比较长。

  CSS的animation可以做出大多数的loading,比如:

CSS制作简单loading动画CSS制作简单loading动画CSS制作简单loading动画CSS制作简单loading动画

 

loading1:

1、HTML:

1 <div id="ddr">
2     <div class="ddr ddr1"></div>
3     <div class="ddr ddr2"></div>
4     <div class="ddr ddr3"></div>
5     <div class="ddr ddr4"></div>
6     <div class="ddr ddr5"></div>
7 </div>

2、CSS:

 1 #ddr{
 2     margin: 0 auto;
 3     width: 70px;
 4     height: 120px;
 5 }
 6 .ddr{
 7     width: 10px;
 8     height: 120px;
 9     float: left;
10     margin: 2px;
11     background-color: #00ff00;
12     animation: loading 1s infinite ease-in-out;/*animation:动画名称 持续时间 动画速度曲线 延迟 执行多少次 是否正反方向轮流播放*/
13 }
14 .ddr2{
15     animation-delay: -0.9s;/*定义开始执行的地方,负号表示直接从第900ms开始执行*/
16 }
17 .ddr3{
18     animation-delay: -0.8s;
19 }
20 .ddr4{
21     animation-delay: -0.7s;
22 }
23 .ddr5{
24     animation-delay: -0.6s;
25 }
26 @keyframes loading {
27     0%,40%,100%{ /*定义每帧的动作*/
28         -webkit-transform: scaleY(0.5);
29     }
30     20%{
31         -webkit-transform: scaleY(1);
32     }
33 }

loading2:

1、HTML:

1 <div id="circle"></div>

2、CSS:

 1 #circle{
 2     margin: 20px auto;
 3     width: 100px;
 4     height: 100px;
 5     border: 5px white solid;
 6     border-left-color: #ff5500;
 7     border-right-color:#0c80fe;
 8     border-radius: 100%;
 9     animation: loading1 1s infinite linear;
10 }
11 @keyframes loading1{
12     from{transform: rotate(0deg)}to{transform: rotate(360deg)}
13 }

loading3:

1、HTML:

1 <div id="loader3">
2     <div id="loader3-inner"></div>
3 </div>

2、CSS:

 1 #loader3{
 2     box-sizing: border-box;
 3     position: relative;
 4     margin-left: 48%;
 5     transform: rotate(180deg);
 6     width: 50px;
 7     height: 50px;
 8     border: 10px groove rgb(170, 18, 201);
 9     border-radius: 50%;
10     animation: loader-3 1s ease-out alternate infinite;/* alternate表示则动画会在奇数次数(1、3、5 等等)正常播放,而在偶数次数(2、4、6 等等)反向播放 */
11 }
12 #loader3-inner{
13     box-sizing: border-box;
14     width: 100%;
15     height: 100%;
16     border: 0 inset rgb(170, 18, 201);
17     border-radius: 50%;
18     animation: border-zoom 1s ease-out alternate infinite;
19 }
20 @keyframes loader-3 {
21     0%{
22         transform: rotate(0deg);
23     }
24     100%{
25         transform: rotate(-360deg);
26     }
27 }
28 @keyframes border-zoom {
29     0%{
30         border-width: 0px;
31     }
32     100%{
33         border-width: 10px;
34     }
35 }

loading4:

1、HTML:

1 <div id="loading4">
2     <div id="loader4" class="heart"></div>
3 </div>

2、CSS:

 1 #loading4{
 2     width: 100%;
 3     height: 100px;
 4 }
 5 #loader4{
 6     position: relative;
 7     margin-left: calc(50% - 25px);
 8     width: 50px;
 9     height: 50px;
10     animation: loader-4 1s ease-in-out alternate infinite;
11 }
12 .heart:before{
13     position: absolute;
14     left: 11px;
15     content: "";
16     width: 50px;
17     height: 80px;
18     transform: rotate(45deg);
19     background-color: rgb(230, 6, 6);
20     border-radius: 50px 50px 0 0;
21 }
22 .heart:after{
23     position: absolute;
24     right: 11px;
25     content: "";
26     width: 50px;
27     height: 80px;
28     background-color: rgb(230, 6, 6);
29     transform: rotate(-45deg);
30     border-radius: 50px 50px 0 0;
31 }
32 @keyframes loader-4 {
33     0%{
34         transform: scale(0.2);
35         opacity: 0.5;
36     }
37     100%{
38         transform: scale(1);
39         opacity: 1;
40     }
41 }

 

逢年过节,百度或者谷歌都会在首页播放一段动画,比如元宵节:

CSS制作简单loading动画

这个动画不是gif图,而是一张长长的包含所有帧的图片:

CSS制作简单loading动画

仿照animation一帧一桢的思路,可以将这张图片做成动画:

 1 #picHolder{
 2 /* 图片样式 */
 3     position: absolute;
 4     top: 17%;
 5     left: 50%;
 6     width: 270px;
 7     height: 129px;
 8     margin-left:-135px;
 9     background-image: url("../../../Library_image/tangyuan.png");
10     background-repeat: no-repeat;
11     background-position-x: 0;
12     cursor: pointer; 
13 }
 1 function animation () {
 2 /* 定时移动图片,使观众看到不同的帧 */
 3   var po = 0
 4   var i = 0
 5   var holder = document.getElementById('picHolder')
 6   setInterval(function () {
 7     po += -270
 8     i++
 9     holder.style.backgroundPositionX = po + 'px'
10     if (i >= 31) {
11       i = 0
12       po = 270
13     }
14   }, 100)
15 }
16 window.onload = function () {
17   animation()
18 }

不过有时候他们又会放上一张gif图,不懂他们的套路