当前位置: 首页 > Web前端 > HTML5

三种Loading制作方案

时间:2023-04-05 01:28:57 HTML5

1.介绍Loading是一个几乎在每个应用程序中都会用到的组件。很多组件库都会提供相应的Loading组件,但是有时候我们可能需要自定义Loading效果,掌握Loading组件制作的基础知识就会变得非常有必要。loading主要是一个旋转环,旋转部分比较简单,直接通过css动画就可以实现,所以关键部分就是获取loading环。2.通过border-radius画一个圆环我们通常会先将一个元素设置为等长等宽的正方形,然后设置这个元素的border-radius值为50%,这样就可以把一个元素画成圆了。需要注意的是border-radius:50%是让整个方形元素变成圆形,包括边框和内容区域。所以我们可以通过控制元素的边框和内容区域的大小来画一个圆环,以元素的内容区域为内圈,以元素的边框区域为外圈。

.loading-css{width:50px;/*先把加载区域改成正方形*/height:50px;显示:内联块;/*将加载区域更改为行内元素,以防止旋转,100%宽度旋转*/border:3pxsolid#f3f3f3;/*设置周围边框的大小,颜色设置为浅白色*/border-top:3pxsolidred;/*设置上边框颜色为红色高亮,这样旋转的时候可以看到旋转的效果*/border-radius:50%;/*把边框和内容区域变成一个圆圈*/}效果如下:circle圆环效果出来了,然后让圆环旋转,如:@keyframesloading-360{0%{transform:旋转(0度);/*在动画开始时旋转0度*/}100%{transform:rotate(360deg);/*动画结束旋转360度*/}}.loading-css{/*在之前的CSS基础上添加动画效果*/animation:loading-3600.8sinfinitelinear;/*在圆环上添加一个旋转360度的动画,并且是无限次*/}二、通过svg绘制圆环SVG是指可缩放矢量图形(ScalableVectorGraphics),它使用XML格式来定义图像,其标签可以用来创建一个圆,外面必须嵌套一个标签。.loading-svg{宽度:50px;/*设置svg显示区域的大小*/height:50px;}标签的宽高设置svg图形可显示区域的大小。viewBox表示截取图形的区域,因为矢量图的绘制区域可以无限大,具体绘制位置要看具体的设置。比如上面画的圆,圆心坐标为(25,25),半径为20,viewBox设置为005050,表示截图区域在坐标为矩形的区域内左上角的坐标(0,0)和右下角的坐标(50,50),截取这个区域然后把截取的矢量图放在svg的可显示区域,并根据到svg的可显示区域的大小,但是截取的图像必须完全显示在svg的可显示区域中。假设,现在svg的大小设置为60px,如:.loading-svg{width:60px;/*设置svg显示区域的大小*/height:60px;}上面分析过,在viewBox截图区域,绘制的圆心刚好在截图区域的中心,有5px的距离截图区域的边框和绘制的圆之间,圆的半径为20px,所以比例为1:4。现在将svg显示区域改为60px,所以截图也需要按比例放大,占据整个svg显示区域。截图区域拉伸后,圆心位置变为(30,30),即半径变为30。按照1:4的比例,半径变为24,外围变为6,所以整个圈子也会变大。需要注意的时候,绘制的圆目前是不可见的,因为没有给画笔设置颜色,如:.path{stroke:#409eff;/*设置画笔的颜色*/stroke-width:2;/*设置线的宽度*/}现在你可以看到绘制的圆了。为了给圆环添加旋转效果,我们需要画一个有缺口的圆环,然后改变缺口的位置和大小来实现旋转效果,如:.path{stroke-dasharray:95,126;/*设置实现长度95,虚线长度126*/stroke-dashoffset:0;/*设置虚线的偏移位置*/}如图所示,画圆环的起点是水平方向最右边的点,然后顺时针画。因为圆环的周长为23.1420=125.6,约等于126,stroke-dasharray将实线(可见部分)的长度设置为95,约等于圆的3/4,所以可以只画到圆环的最高点,后面是126的虚线,但是圆环的周长只有126,所以只能显示31的虚线。可以看成水平线无限循环,实线(-221,0)---虚线(-126,0)---当前起点为(0,0)---实线(95,0)---虚线(221,0)---实线(316,0),则让横线起点(0,0)与圆环起点重合,则水平线可以顺时针绕圈,随着stroke-dashoffset起始位置的变化,左边的虚线(-126,0)可以慢慢显示。当stroke-dashoffset值为负时,上面的线向右拉,当stroke-dashoffset值为正时,下面的线向右拉。接下来就是添加圆环的旋转效果,分别设置三个动画状态,比如//0%{stroke-dasharray:1,126;/*实线部分1,虚线部分126*/stroke-dashoffset:0;/*前面1/126表示实线,后面125表示空行*/}以圆环最右边1个像素为起点画一条实线,再画一条虚线126像素的line(blank),因为圆的周长是126,所以剩下的部分都是空白,如图,//50%{stroke-dasharray:95,126;/*实线部分95,虚线部分126*/stroke-dashoffset:-31px;/*clockwise移动31/126,即前面31/126显示空白,后面3/4显示一条线*/}从圆环最右边开始,顺时针移动31个像素,即1/4的圆环,所以实线的起点就变成了圆环的底部,实线的长度为95像素,也就是圆环的3/4,如图,//100%{中风-dasharray:6,120;/*实线部分6,虚线部分120*/stroke-dashoffset:-120px;/*最后的顺时针偏移量为120/126,即前120/126表示空白,后面6个点表示直线部分*/}从圆环最右边开始顺时针移动120个像素,所以实线的长度只有6个像素。如图,给圆环添加一个动画效果,比如:.path{animation:loading-dash1.5sease-in-outinfinite;}@keyframesloading-dash{0%{stroke-dasharray:1,126;/*实线部分1,虚线部分126*/stroke-dashoffset:0;/*前面1/126显示实线,后面125显示空行*/}50%{stroke-dasharray:95,126;/*实线部分95,虚线部分126*/stroke-dashoffset:-31px/*顺时针偏移31/126,即前面31/126为空白,后面3/4显示行*/}to{中风-dasharray:6,120;/*实线部分为6,虚线部分为120*/stroke-dashoffset:-120px;/*最后顺时针偏移120/126,即前120/126显示空白,后6点显示线条部分*/}}为了让Loading动画更加生动细腻,我们可以还要给svg标签加上一个旋转动画,比如:.loading-svg{width:50px;/*设置svg显示区域的大小*/height:50px;动画:loading-rotate1.5s无限缓入缓出;/*给svg添加一个旋转动画*/}@keyframesloading-rotate{to{transform:rotate(1turn);//旋转1圈}}3.通过iconfont的字体图标,我们可以直接使用iconfont字体图标来代替圆环的绘制,直接以字体的形式显示圆环,然后加上旋转动画它,例如:我们可以在iconfont网站上下载喜欢的Loadingpattern字体icon下载后,将解压后的内容复制到项目中,并将iconfont.css导入到页面中,在元素中添加iconfont类样式来显示字体图标,字体图标会有对应的unicode编码,通过::在设置内容为unicode编码之前,可以显示对应的字体图标,或者直接在unicode编码前加上\&#x,作为元素内容。接下来让字体图标旋转,如:.icon-loading{animation:rotating2sinfinitelinear;}@keyframesrotating{0%{transform:rotate(0deg)/*动画起始位置旋转0度*/}to{transform:rotate(1turn)/*动画结束位置旋转1度*/}}