react 实现 loading 动效圈,支持配置转一圈的 duration
本文地址: https:////www.cnblogs.com/veinyin/p/12442768.html
需求:圆环从无到整,变成整圈后要有个渐隐效果
实现效果如下 左右两个半圆相接处有一条灰色的边 这个暂时还没解决
实现思路:
1. 左右两个半圆拼接成一个整圆,圆环通过 border 实现,最后 animation 实现动画效果
2. 先旋转右半边,0-45%旋转显示右半圆,45%-90%等待左半圆绘制,90%-100%等待整个圆渐隐
3. 然后旋转左半边,0-45%不显示,45%-90%旋转显示左半圆,90%-100%等待整个圆渐隐
4. 90%-100% 整体渐隐
5. 动画时间写死不方便其他需求复用,在行内设置 animation-duration 属性即可。为便于与定时器用同一个变量,duration 配置时单位为 ms
具体实现代码如下 默认是动画时间是5s
react 组件
1 import React from 'react'2
3 import classNames from 'classnames'
4 import styles from './index.module.less'
5
6 const LoadingCircle = (props: { description?: string; duration?: number | string }): JSX.Element => {
7 const { description = '数据加载中...', duration = 5000 } = props
8 return (
9 <div className="flex">
10 <div className={styles.loader}>
11 <div className={styles.wrapper} style={{ animationDuration: `${duration}ms` }}>
12 <div className={styles.halfBox} style={{ right: 0 }}>
13 <div
14 className={classNames(styles.circle, styles.right)}
15 style={{ animationDuration: `${duration}ms` }}
16 ></div>
17 </div>
18 <div className={styles.halfBox} style={{ left: 0 }}>
19 <div
20 className={classNames(styles.circle, styles.left)}
21 style={{ animationDuration: `${duration}ms` }}
22 ></div>
23 </div>
24 </div>
25 </div>
26 <span style={{ fontSize: 12, color: '#666666' }}>{description}</span>
27 </div>
28 )
29 }
30
31 export default LoadingCircle
View Code
样式
1 .loader {2 position: relative;
3 left: -3px;
4 margin-right: 3px;
5 .wrapper {
6 width: 16px;
7 height: 16px;
8 position: relative;
9 animation: show_hide 5s linear infinite;
10 }
11 .halfBox {
12 width: 8px;
13 height: 16px;
14 position: absolute;
15 top: 0;
16 overflow: hidden;
17 }
18 .circle {
19 width: 16px;
20 height: 16px;
21 border-radius: 50%;
22 position: absolute;
23 top: 0;
24 transform: rotate(45deg);
25 }
26 .right {
27 border: 2px solid transparent;
28
29 border-top: 2px solid #2b6dff;
30 border-right: 2px solid #2b6dff;
31 right: 0;
32
33 animation: right_circle 5s linear infinite;
34 }
35 .left {
36 border: 2px solid transparent;
37 border-bottom: 2px solid #2b6dff;
38 border-left: 2px solid #2b6dff;
39 left: 0;
40 animation: left_circle 5s linear infinite;
41 }
42 @keyframes right_circle {
43 0% {
44 transform: rotate(-135deg);
45 }
46 45%,
47 90% {
48 transform: rotate(45deg);
49 }
50 50%,
51 100% {
52 transform: rotate(45deg);
53 }
54 }
55 @keyframes left_circle {
56 0%,
57 45% {
58 transform: rotate(-135deg);
59 }
60 90% {
61 transform: rotate(45deg);
62 }
63 100% {
64 transform: rotate(45deg);
65 }
66 }
67 @keyframes show_hide {
68 0%,
69 90% {
70 opacity: 1;
71 }
72 100% {
73 opacity: 0;
74 }
75 }
76 }
View Code
END~~~≥ω≤
以上是 react 实现 loading 动效圈,支持配置转一圈的 duration 的全部内容, 来源链接: utcz.com/z/382962.html