手写一个Vue Loading通过自定义api控制显示与关闭 记录

实现目标调用方法(类似element的loading):

this.$loading.show() 显示

this.$loading.hide()关闭

应用vue知识点:extend函数,use函数
简单分析,this. l o a d i n g 的 实 现 通 过 u s e 使 用 插 件 方 式 把 loading的实现通过use使用插件方式把 loadinguse使loading属性绑定到Vue原型
show()和hide()实现通过extend函数生成loading组件对应vue子实例,单独控制属性,并动态把loading组件插入移除body

文件目录:
在这里插入图片描述

loading.vue (测试代码样式简单设置)

<template>
  <div class="loading-wrap" v-if="visible">
    <div class="loading-view" >加载中...</div>
  </div>
</template>
<script>
export default {
    name:'loading',
    data(){
      return{
        visible:false
      }
    },

};
</script>
<style lang="css" scoped>
.loading-wrap {
  position: fixed;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
  background-color: rgba(255, 255, 255, 0.6);
}
.loading-view {
  color: #333;
  font-size: 18px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%,-50%);
}
</style>

index.js

import Vue from "vue";
import loading from "./loading";

const vueInstance=Vue.extend(loading);
const childInstance= new vueInstance({
    el:document.createElement('div'),
});



let interval;
const $loading={};

//隐藏
$loading.hide=()=>{
    childInstance.visible=false;
    if(interval) {
        clearInterval(interval);
        interval=null;
    }

    if(childInstance.$el&&childInstance.$el.parentNode==document.body){
 
        document.body.removeChild(childInstance.$el)
    }
}

//显示 time:显示多少时间后自动关闭
$loading.show=(time=2000)=>{
      childInstance.visible=true;
     document.body.appendChild(childInstance.$el);
     interval=setTimeout(() => {
         $loading.hide();
     }, time);
}



export default $loading;

install.js

import loading from './index'

export default{
    install(Vue){
       Vue.prototype.$loading=loading;
    }
}

main.js

import loading from './components/loading/install'
Vue.use(loading);

页面调用

this.$loading.show(3000);//显示(3秒后关闭)

this.$loading.hide()//关闭

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值