react实现加载动画

1.Spinning.tsx

import "./Spinning.scss";

interface Props {
    isLoading: boolean;
    children?: React.ReactNode;
}

const Spinning: React.FC<Props> = ({
    isLoading = true,
    children
}) => {
    return <div className={`spinning-wrapper${isLoading ? " loading" : ""}`}>
        {children}
        <div className="spinning-mask">
            
            <div className="loading-spinner">
                <span></span>
                <span></span>
                <span></span>
                <span></span>
                <span></span>
            </div>
        </div>
    </div>
};

export default Spinning;

2. Spinning.scss

.spinning-wrapper {
    position: relative;
    height: 100%;

    .spinning-mask {
        width: 100%;
        height: 100%;
        position: absolute;
        top: 0;
        left: 0;
        z-index: 5;
        background: #f6f6f6ba;

        & .loading-spinner {
            width: 150px;
            height: 15px;
            margin: 0 auto;
            margin-top: 100px;

            & span {
                display: inline-block;
                width: 15px;
                height: 100%;
                margin-right: 5px;
                border-radius: 50%;
                background: #18beeb8f;
                position: relative;
                animation: load 5s ease-in-out infinite;
                -webkit-animation: load 5s ease-in-out infinite;
            }

            @keyframes load {
                0% {
                    left: -50px;
                    opacity: 0.1;
                }

                50% {
                    opacity: 1;
                }

                100% {
                    left: 100px;
                    opacity: 0.1;
                }
            }

            @-webkit-keyframes load

            /*Safari and Chrome*/
                {
                0% {
                    left: -50px;
                    opacity: 0.1;
                }

                50% {
                    opacity: 1;
                }

                100% {
                    left: 100px;
                    opacity: 0.1;
                }
            }


            & span:last-child {
                margin-right: 0px;
            }

            & span:nth-child(1) {
                -webkit-animation-delay: 0.13s;
            }

            & span:nth-child(2) {
                -webkit-animation-delay: 0.26s;
            }

            & span:nth-child(3) {
                -webkit-animation-delay: 0.39s;
            }

            & span:nth-child(4) {
                -webkit-animation-delay: 0.52s;
            }

            & span:nth-child(5) {
                -webkit-animation-delay: 0.65s;
            }

        }
    }

}

3. 调用

<Spinning isLoading={true}>
    <div>Test</div>
</Spinning>

4. 展示

相关推荐

  1. React实现虚拟滚动

    2023-12-08 22:38:04       30 阅读
  2. React

    2023-12-08 22:38:04       21 阅读
  3. 登录动画

    2023-12-08 22:38:04       43 阅读
  4. React和Vue实现路由懒

    2023-12-08 22:38:04       31 阅读
  5. React和Vue实现路由懒

    2023-12-08 22:38:04       26 阅读
  6. React和Vue实现路由懒

    2023-12-08 22:38:04       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 22:38:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 22:38:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 22:38:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 22:38:04       18 阅读

热门阅读

  1. Redis研学-五种基本类型的常用命令

    2023-12-08 22:38:04       39 阅读
  2. 嵌入式面试题

    2023-12-08 22:38:04       37 阅读
  3. UVa489刽子手游戏题解

    2023-12-08 22:38:04       40 阅读
  4. vue3 组建传值

    2023-12-08 22:38:04       41 阅读
  5. MYSQL窗口函数详解和实战(内含示例)

    2023-12-08 22:38:04       31 阅读
  6. 缺陷责任期与质量保修期如何快速区分?

    2023-12-08 22:38:04       33 阅读
  7. QNX的nicinfo ifmcstat if_up和tcpdump

    2023-12-08 22:38:04       34 阅读