众所周知,loading已经充斥了各种页面当中:页面加载尚未完成前、瀑布流页面到达底部后加载新的数据之前、表单页面提交数据等待反馈之前,往往都会其相关数据到来前加一个loading等代图来过渡,其目的是提升页面的友好度,增强用户体验。
在现如今的大数据时代,这一点大为重要,但是有一个问题出现了,倘若在一个网络较差的环境下,loading一直存在,容易让用户产生倦怠,故而放弃该页面的访问。因此将页面loading做的更有趣味性就尤为重要,loading越有趣用户停留在页面的时间就会相应加长,从而也给数据的加载争取了宝贵的时间。
那么接下来就是loading的问题,传统页面的loading都是由设计师来设计一个gif图来实现,这样就产生了一个矛盾:gif图是图片加载它也需要耗费时间,同时如果要做的有趣就是要在图片的颜色和动画上下功夫,这样又可能导致gif图大小越做越大,从而拖慢了页面的加载时间。
综上所述,前端工程师利用自己的技术来制作loading尤为重要,好处有两点:
1.因为loading是用相关的css和html制作,不需要加载gif图片,故一定程度上节省了加载时间;
2.因为是自己写的,所以动画上自己可以更好的控制;
本人不才,利用业余时间制作的几个利用css3制作loading的demo,供大家参考,时间有限可能有一些浏览器兼容问题,欢迎与我沟通相关技术问题。
css部分
*{margin:0;padding:0;} .boxflex{display:box;display:-webkit-box;} .center{display:box;display:-webkit-box;-webkit-box-pack:center;-webkit-box-align:center;} .box{width:200px;height:200px;border:1px solid #ccc;position:relative;} .move{animation:move 2s infinite;-webkit-animation:move 2s infinite;} .scale{animation:scale 1s infinite;-webkit-animation:scale 1s infinite;} .line{animation:line 1s infinite;-webkit-animation:line 1s infinite;} .fz{animation:fz 1.5s infinite;-webkit-animation:fz 1.5s infinite;} .delay1{animation-delay:0.25s;-webkit-animation-delay:0.25s;} .delay2{animation-delay:0.5s;-webkit-animation-delay:0.5s;} .load{width:100px;height:100px;border:10px solid #ccc;border-radius:50%;display:block;} .load1{border-top:10px solid #64efb9;} .load2{position:relative;} .load2:before{position:absolute;top:0;left:50%;margin-left:-10px;margin-top:-15px;width:20px;height:20px;border-radius:50%;background:#fff;content:'';box-shadow:0 0 10px #747373;} .sc,.li{display:block;} .sc i{width:20px;height:20px;background:#64efb9;border-radius:50%;display:inline-block;margin:0 10px;} .li i{display:inline-block;background:#64efb9;width:10px;height:50px;margin:0 4px;} .li em{background:#fff;border:10px solid #64efb9;width:50px;height:50px;display:inline-block;} .li i:nth-child(2){animation-delay:.2s;-webkit-animation-delay:.2s;} .li i:nth-child(3){animation-delay:.3s;-webkit-animation-delay:.3s;} .li i:nth-child(4){animation-delay:.4s;-webkit-animation-delay:.4s;} .li i:nth-child(5){animation-delay:.5s;-webkit-animation-delay:.5s;} .li i:nth-child(6){animation-delay:.6s;-webkit-animation-delay:.6s;}
animation制作动画部分
@keyframes move{ 0%{ transform:rotateZ(0); } 100%{ transform:rotateZ(360deg); } } @-webkit-keyframes move{ 0%{ -webkit-transform:rotateZ(0); } 100%{ -webkit-transform:rotateZ(360deg); } } @keyframes scale{ /*0%{ transform:scale3d(1,1,1); }*/ 50%{ transform:scale3d(0,0,0); } /*100%{ transform:scale3d(1,1,1); }*/ } @-webkit-keyframes scale{ /*0%{ -webkit-transform:scale3d(1,1,1); }*/ 50%{ -webkit-transform:scale3d(0,0,0); } /*100%{ -webkit-transform:scale3d(1,1,1); }*/ } @keyframes line{ 50%{ transform:scaleY(0); } } @-webkit-keyframes line{ 50%{ -webkit-transform:scaleY(0); } } @keyframes fz{ 0%{ transform:perspective(160px); } 50%{ transform:perspective(160px) rotateX(-180deg) rotateY(0); } 100%{ transform:perspective(160px) rotateX(-180deg) rotateY(-180deg); } } @-webkit-keyframes fz{ 0%{ -webkit-transform:perspective(160px); } 50%{ -webkit-transform:perspective(160px) rotateX(-180deg) rotateY(0); } 100%{ -webkit-transform:perspective(160px) rotateX(-180deg) rotateY(-180deg); } }
html部分
<div class="boxflex"> <div class="box center"> <span class="load load1 move"></span> </div> <div class="box center" > <span class="load load2 move"><i></i></span> </div> <div class="box center"> <span class="sc"> <i class="scale"></i> <i class="scale delay1"></i> <i class="scale delay2"></i> </span> </div> <div class="box center"> <span class="li"> <i class="line"></i> <i class="line"></i> <i class="line"></i> <i class="line"></i> <i class="line"></i> <i class="line"></i> </span> </div> <div class="box center"> <span class="li"> <em class="fz"></em> </span> </div> </div>
页面demo效果
![Uploading QQ截图20160727155536_186844.png . . .]
作者:峰极天下
链接:https://www.jianshu.com/p/bfee4c4b069a