自定义v-loading指令

在使用vue框架中,自定义了一系列的指令,但样式能修改的局限性比较大,所以自己可以自定义一个!!
vue2与vue3除了文件格式外,基本是一样的,不做过多讲解,以vue3为例

没有华丽的文采,直接上代码哈

  1. 创建vep-loading.jsvep-loading.ts文件(名字可自取

    export const vepLoading = {
        beforeMount(el: any, binding: any) {
            const isLoading = binding.value;
            if (isLoading) {
                showLoading(el);
            }
        },
    
        mounted(el: any, binding: any) {
            const isLoading = binding.value;
            if (isLoading) {
                showLoading(el);
            }
        },
        updated(el: any, binding: any) {
            const isLoading = binding.value;
            if (isLoading !== binding.oldValue) {
                isLoading ? showLoading(el) : hideLoading(el);
            }
        },
        unmounted(el: any) {
            hideLoading(el);
        }
    }
    
    function showLoading(el: any) {
        el.classList.add('vep-loading');
    }
    
    function hideLoading(el: any) {
        el.classList.remove('vep-loading');
    }
    

    在这里插入图片描述

  2. main.jsmain.ts文件中全局注册

    import {createApp} from 'vue'  // 引入vue属性
    import App from './App.vue'  // 引入App文件
    import {vepLoading} from "@/utils/vep-loading.ts"
    
    const app = createApp(App)
    app.directive('vep-loading', vepLoading)
    
  3. 使用(任意div均可,这里以表格为例)

    <template>
      <div>
        <div v-vep-loading="loading" class="box"></div>
        <el-button type="primary" @click="openHandle" > 指令方式 </el-button>
      </div>
    </template>
    
    <script setup lang="ts">
    import {ref} from 'vue'
    const loading = ref(false);
    
    const openHandle= () => {
      loading.value = true;
      setTimeout(() => {
        loading.value = false;
      }, 2000);
    }
    </script>
    
    <style scoped>
    .box{
      width: 500px;
      height: 300px;
      border: 1px solid red;
    }
    </style>
    
    

    el-table中(该文件见之前自定义vep-crud组件)

    在这里插入图片描述

  4. 样式

    // 自定义加载动画指令
    .vep-loading {
    	position: relative;
    	
        &::before {
          content: '';
          position: absolute;
          width: 100%;
          height: 100%;
          z-index: 9999999;
          background-position: center;
          background-color: rgba(0, 0, 0, 0.3);
          background-repeat: no-repeat;
          background-size: 64px 64px;
          background-image: url("http://175.178.164.195:9000/kylin-mall/icon/loading-02.gif");  // 可替换自己的图片
        }
    }
    
  5. 展示效果:
    在这里插入图片描述

    在这里插入图片描述
    注:背景颜色可以在css中自定义,我用的是黑色透明的,element-ui用的是白色透明的,根据个人喜好来

    在这里插入图片描述

代码持续更新,若有更好的方法,欢迎各位道友评论区留言探讨!

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值