美文网首页
Vue SSR 项目 Nuxt.js 框架之《如何增加全局 lo

Vue SSR 项目 Nuxt.js 框架之《如何增加全局 lo

作者: 酷酷的凯先生 | 来源:发表于2022-03-10 16:01 被阅读0次

# 前言

nuxt还有一个好玩的功能,他提供了一个页面加载的loading在页面头部展示,可设置高度、颜色等样式。页面开始加载时启动,加载完成后自动消 (官网参考)。

# 实现与配置

配置nuxt.config.js

export default{
    loading: {
        color: 'blue', // 进度条的颜色
        failedColor: 'red', // 页面加载失败时的颜色( 当 data 或 fetch 方法返回错误时)
        height: '20px', // 进度条的高度(在进度条元素的 style 属性上体现)
        throttle: 200, // 在 ms 中, 在显示进度条之前等待指定的时间。 用于防止条形闪烁
        duration: 5000, // 进度条的最大显示时长, 单位毫秒。 Nuxt.js 假设页面在该时长内加载完毕
        continuous: false, // 当加载时间超过duration时, 保持动画进度条
        css: true, // 设置为 false 以删除默认进度条样式( 并添加自己的样式)
        rtl: false // 从右到左设置进度条的方向
    }
}

这时切换页面,就能子页面顶部看到进度条了

# 定义实现

我们新建一个自己的加载组件来替代Nuxt.js默认的,需要在loading配置项里指定组件的路径,Nuxt.js 会自动调用该组件。而且自定义组件需要实现以下接口方法:

方法 是否必须 描述
start() 路由更新(即浏览器地址变化)时调用, 请在该方法内显示组件
finish() 路由更新完毕(即asyncData方法调用完成且页面加载完)时调用,请在该方法内隐藏组件
fail(error) 路由更新失败时调用(如asyncData方法返回异常)
increase(num) 页面加载过程中调用, num 是小于 100 的整数

我们在components文件下创建loading.vue作为自定义loading,内容如下:

<template>
    <!-- 自定义loading -->
    <div class="loading-box" v-if="laoding" />
</template>

<script>
    export default {
        data:()=>({
            laoding: false
        }),
        methods:{
            start(){
                this.laoding = true;
            },
            finish(){
                this.laoding = false;
            }
        }
    }
</script>

<style lang="scss" scoped>
    .loading-box{
        width: 100px;
        height: 100px;
        background-color: #23465a;
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 999999;
        animation: rotateplane 1.5s infinite ease-in-out;
        -webkit-animation: rotateplane 1.5s infinite ease-in-out;
    }

    @-webkit-keyframes rotateplane {
        0%{-webkit-transform:  perspective(120px);}
        50%{-webkit-transform:  perspective(120px) rotateY(180deg);}
        100%{-webkit-transform:  perspective(120px) rotateY(180deg) rotateY(180deg);}
    }

    @keyframes rotateplane {
        0%{
            transform:  perspective(120px) rotateY(0deg) rotateY(0deg);
            -webkit-transform:  perspective(120px) rotateY(0deg) rotateY(0deg);
        }
        50%{
            transform:  perspective(120px) rotateX(-180.1deg) rotateY(0deg);
            -webkit-transform:  perspective(120px) rotateX(-180.1deg) rotateY(0deg);
        }
        100%{
            transform:  perspective(120px) rotateX(-180deg) rotateY(179.9deg);
            -webkit-transform:  perspective(120px) rotateX(-180deg) rotateY(179.9deg);
        }
    }
</style>

记得改了nuxt.config.ls记得重启,之后切换页面就可以看到自定义的loading了~~

相关文章

网友评论

      本文标题:Vue SSR 项目 Nuxt.js 框架之《如何增加全局 lo

      本文链接:https://www.haomeiwen.com/subject/edifdrtx.html