L
O
A
D
I
N
G

页面加载动画


页面加载动画

今天的主题是为博客添加页面加载动画。

下面是页面加载动画的详细作用:

  1. 视觉吸引力: 页面加载动画可以增加页面的吸引力,使用户在等待页面加载时感到更加愉悦和有趣。精美的加载动画可以提升用户体验,增加用户对网站的好感度。

  2. 指示器: 加载动画可以作为页面加载的指示器,告诉用户页面正在加载中,以及加载进度如何。这可以帮助用户了解页面加载的状态,减少用户的不耐烦和不确定性。

  3. 心理安慰: 在加载较慢的情况下,页面加载动画可以给用户一种心理上的安慰,让他们知道页面正在工作,而不是出现了问题。这有助于降低用户的焦虑和流失率。

  4. 品牌展示: 页面加载动画也可以成为品牌的一部分,通过设计独特的加载动画来展示品牌的风格和特点,增强品牌形象。

综上所述,页面加载动画在提升用户体验方面都发挥着重要作用,是网页设计中常用的元素之一。

效果

loading

实现

  1. matery\source\css下新建loading.css,添加以下代码

    :root {
        --primary-color: #fff;
        /* 使用变量定义主要颜色 */
    }
    
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    
    body {
        height: 100vh;
    }
    
    .loader-wrapper {
        position: fixed;
        left: 0;
        top: 0;
        z-index: 1;
        width: 100%;
        height: 100%;
        overflow: hidden;
        background: linear-gradient(45deg, rgb(90, 54, 148) 0%, rgb(19, 189, 206) 33%, rgb(0, 148, 217) 66%, rgb(111, 199, 181) 100%);
        background-size: 400%;
        background-position: 0% 100%;
        animation: gradient 7.5s ease-in-out infinite;
    }
    
    .loader,
    .loader::before,
    .loader::after,
    .loader img {
        border-radius: 50%;
        position: absolute;
        border: 3px solid transparent;
        border-top-color: var(--primary-color);
    }
    
    .loader {
        width: 150px;
        height: 150px;
        left: 50%;
        top: 50%;
        margin-left: -75px;
        margin-top: -75px;
        z-index: 2;
        display: flex;
        justify-content: center;
        align-items: center;
        animation: spin 1.7s linear infinite;
    }
    
    .loader::before {
        content: "";
        position: absolute;
        top: 5px;
        left: 5px;
        bottom: 5px;
        right: 5px;
        animation: spin 0.6s linear infinite reverse;
    }
    
    .loader::after {
        content: "";
        position: absolute;
        top: 15px;
        left: 15px;
        bottom: 15px;
        right: 15px;
        animation: spin 1s linear infinite;
    }
    
    .loader img {
        width: 100%;
        height: 100%;
        object-fit: cover;
        border-radius: 50%;
        animation: spin 1.7s linear infinite reverse;
    }
    
    .loader-text {
        width: 50%;
        height: 36px;
        position: absolute;
        top: 72%;
        left: 50%;
        transform: translateX(-50%);
        z-index: 3;
        user-select: none;
    }
    
    .loader-text div {
        width: 30px;
        height: 36px;
        color: var(--primary-color);
        font-size: 32px;
        margin: 0 20px;
        position: absolute;
        opacity: 0;
        transform: rotate(180deg);
        animation: move 2s linear infinite;
    }
    
    .loader-text div:nth-child(8)::before,
    .loader-text div:nth-child(9)::before,
    .loader-text div:nth-child(10)::before {
        content: "";
        width: 10px;
        height: 10px;
        border-radius: 50%;
        background-color: var(--primary-color);
        position: absolute;
        left: 0;
        bottom: 0;
    }
    
    .loader-text div::after,
    .loader-text div:nth-child(8)::after,
    .loader-text div:nth-child(9)::after,
    .loader-text div:nth-child(10)::after {
        content: "";
        width: 10px;
        height: 5px;
        border-radius: 50%;
        background-color: rgba(255, 255, 255, 0.15);
        position: absolute;
        bottom: -40px;
        left: 50%;
        margin-left: -5px;
    }
    
    .loader-text div:nth-child(8)::after,
    .loader-text div:nth-child(9)::after,
    .loader-text div:nth-child(10)::after {
        left: 0;
        margin-left: 0;
    }
    
    .loader-text div:nth-child(2) {
        animation-delay: 0.2s;
    }
    
    .loader-text div:nth-child(3) {
        animation-delay: 0.4s;
    }
    
    .loader-text div:nth-child(4) {
        animation-delay: 0.6s;
    }
    
    .loader-text div:nth-child(5) {
        animation-delay: 0.8s;
    }
    
    .loader-text div:nth-child(6) {
        animation-delay: 1s;
    }
    
    .loader-text div:nth-child(7) {
        animation-delay: 1.2s;
    }
    
    .loader-text div:nth-child(8) {
        animation-delay: 1.4s;
    }
    
    .loader-text div:nth-child(9) {
        animation-delay: 1.6s;
    }
    
    .loader-text div:nth-child(10) {
        animation-delay: 1.8s;
    }
    
    @keyframes gradient {
        50% {
            background-position: 100% 0%;
        }
    }
    
    @keyframes spin {
        0% {
            transform: rotate(0);
        }
    
        100% {
            transform: rotate(360deg);
        }
    }
    
    @keyframes move {
        0% {
            right: 0;
            opacity: 0;
        }
    
        35% {
            right: 41%;
            opacity: 1;
            transform: rotate(0);
        }
    
        65% {
            right: 59%;
            opacity: 1;
            transform: rotate(0);
        }
    
        100% {
            right: 100%;
            transform: rotate(-180deg);
        }
    }
    
    /* 小屏幕下(手机类)的样式 */
    @media only screen and (max-width: 601px) {
        .loader {
            width: 100px;
            height: 100px;
            margin-left: -50px;
            margin-top: -50px;
        }
    
        .loader img {
            width: 45%;
            height: 45%;
        }
    
        .loader-text {
            width: 70%;
            font-size: 20px;
        }
    
        .loader-text div {
            width: 20px;
            height: 24px;
            font-size: 18px;
        }
    }
    
    /* 中等屏幕下(平板类)的样式 */
    @media only screen and (min-width: 600px) and (max-width: 992px) {
        .loader {
            width: 120px;
            height: 120px;
            margin-left: -60px;
            margin-top: -60px;
        }
    
        .loader img {
            width: 50%;
            height: 50%;
        }
    
        .loader-text {
            width: 60%;
            font-size: 28px;
        }
    
        .loader-text div {
            width: 25px;
            height: 30px;
            font-size: 24px;
        }
    }
    
    /* 大屏幕下(桌面类)的样式 */
    @media only screen and (min-width: 993px) {
        .loader {
            width: 180px;
            height: 180px;
            margin-left: -90px;
            margin-top: -90px;
        }
    
        .loader img {
            width: 60%;
            height: 60%;
        }
    
        .loader-text {
            width: 50%;
            font-size: 36px;
        }
    
        .loader-text div {
            width: 30px;
            height: 36px;
            font-size: 32px;
        }
    }
  2. matery\layout\_partial新建loading.ejs

    <% if (theme.loadingPages.enable) { %>
        <div id="loader-box">
            /* 你的 HTML 代码将放在这里 */
            <div class="loader-wrapper">
                <div class="loader">
                    <img src="" alt="">  /* 填写你的头像路径 */
                </div>
                <div class="loader-text">
                    <!-- 10个div -->
                    <div>L</div>
                    <div>O</div>
                    <div>A</div>
                    <div>D</div>
                    <div>I</div>
                    <div>N</div>
                    <div>G</div>
                    <div></div>
                    <div></div>
                    <div></div>
                </div>
            </div>
    
            <script>
                var endLoading = function () {
                    document.body.style.overflow = 'auto';
                    document.getElementById('loader-box').remove();
                }
                window.addEventListener('load', endLoading);
            </script>
        </div>
        <% } %>
  3. 部署到本地,查看并调试效果

参考

其他效果


文章作者: loyeh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 loyeh !
评论
  目录