1.实现效果

2.实现原理

  • Vue.extend:extend 创建的是 Vue 构造器,可通过 new Profile().$mount(‘#mount-point’) 来挂载到指定的元素上。

  • vue中install方法:
export default {install(Vue,option){组件指令混入挂载vue原型}
}

3.实现代码

新建components文件夹-新建loading001文件夹-新建index.vue+index.js
index.vue

<template><div v-if="show"><div class="loader-rainbow"><div class="loader-inner"><div class="loader-line-wrap"><div class="loader-line"></div></div><div class="loader-line-wrap"><div class="loader-line"></div></div><div class="loader-line-wrap"><div class="loader-line"></div></div><div class="loader-line-wrap"><div class="loader-line"></div></div><div class="loader-line-wrap"><div class="loader-line"></div></div></div></div></div>
</template><script>
export default {name: "loading001",props: {show: Boolean,},data() {return {};},
};
</script><style scoped>
.loader-rainbow {position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%);z-index: 9999;
}
.loader-inner {bottom: 0;height: 100px;left: 0;margin: auto;position: absolute;right: 0;top: 0;width: 100px;
}.loader-line-wrap {animation: spin 2000ms cubic-bezier(0.175, 0.885, 0.32, 1.275) infinite;box-sizing: border-box;height: 50px;left: 0;overflow: hidden;position: absolute;top: 0;transform-origin: 50% 100%;width: 100px;
}
.loader-line {border: 4px solid transparent;border-radius: 100%;box-sizing: border-box;height: 100px;left: 0;margin: 0 auto;position: absolute;right: 0;top: 0;width: 100px;
}
.loader-line-wrap:nth-child(1) {animation-delay: -50ms;
}
.loader-line-wrap:nth-child(2) {animation-delay: -100ms;
}
.loader-line-wrap:nth-child(3) {animation-delay: -150ms;
}
.loader-line-wrap:nth-child(4) {animation-delay: -200ms;
}
.loader-line-wrap:nth-child(5) {animation-delay: -250ms;
}.loader-line-wrap:nth-child(1) .loader-line {border-color: hsl(0, 80%, 60%);height: 90px;width: 90px;top: 7px;
}
.loader-line-wrap:nth-child(2) .loader-line {border-color: hsl(60, 80%, 60%);height: 76px;width: 76px;top: 14px;
}
.loader-line-wrap:nth-child(3) .loader-line {border-color: hsl(120, 80%, 60%);height: 62px;width: 62px;top: 21px;
}
.loader-line-wrap:nth-child(4) .loader-line {border-color: hsl(180, 80%, 60%);height: 48px;width: 48px;top: 28px;
}
.loader-line-wrap:nth-child(5) .loader-line {border-color: hsl(240, 80%, 60%);height: 34px;width: 34px;top: 35px;
}@keyframes spin {0%,15% {transform: rotate(0);}100% {transform: rotate(360deg);}
}
</style>

index.js

import Vue from 'vue'
import loading001 from './index.vue'const LoadingConstructor = Vue.extend(loading001)const instance = new LoadingConstructor({el: document.createElement('div')
})instance.show = false
const loading = {show() {instance.show = truedocument.body.appendChild(instance.$el)},hide() {instance.show = false}
}export default {install() {if (!Vue.$showLoading) {Vue.$showLoading = loading}Vue.mixin({created() {this.$showLoading = Vue.$showLoading}})}
}

main.js引入

import loading001 from '@/components/loading001/index.js'
Vue.use(loading001)

页面中引用

 this.$showLoading.show();this.$showLoading.hide();

在js中引用,如封装axios场景

 Vue.$showLoading.show()Vue.$showLoading.hide()

4.完整代码,关注公众号 苏苏的bug,更多vue相关,尽在苏苏的码云如果对你有帮助,欢迎你的star+订阅!

vue自定义全局loading加载组件相关推荐

  1. vue 编写全局loading加载动画效果

    加粗1.loading组件样式 <template><transition name="fade"><section><div class ...

  2. axios vue 加载效果动画_vue+axios+element ui 实现全局loading加载示例

    实现全局loading加载 分析需求,我们只需要在请求发起的时候开始loading,响应结束的时候关闭loading,就这么简单 对不对? import axios from 'axios'; imp ...

  3. webpack和vue的按需加载组件、console、抓包

    1.webpack和vue的按需加载组件 webpack特有的懒加载文件的方式,很大的提升了webpack打包SPA应用的在性能方面. 而从webpack2以后require.ensure已经被imp ...

  4. 记录--Vue自定义指令实现加载中效果v-load(不使用Vue.extend)

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 网站效果演示:ashuai.work:8888/#/myLoad GitHub仓库地址代码:github.com/shuirongshu- ...

  5. vue自定义指令---处理加载图片失败时出现的碎图,onerror事件

    目录 一.自定义指令 1.局部注册和使用 2.全局注册和使用 二.自定义指令处理图片加载失败(碎图) 一.自定义指令 vue中除v-model.v-show等内置指令之外,还允许注册自定义指令,获取D ...

  6. 图片懒加载及Vue自定义图片懒加载指令

    文章目录 监听滚动的方式 IntersectionObserver方式 自定义图片懒加载vue指令1 自定义图片懒加载vue指令2 lazyLoadImage.js main.js中注册指令 组件中使 ...

  7. element使用自定义的loading加载效果

    在使用loading加载的过程中,elementui提供了两种样式,但是针对不同的项目,也是有着不同的需求,需要不同的或者特制的loading加载效果. 解决思路如下: 结合elementui本身的标 ...

  8. vue element-ui Loading加载事件的使用以及自定义Loading加载动画

    elemen-ui官方使用 <el-tablev-loading="loading"element-loading-text="拼命加载中"element ...

  9. 7 种最棒的 Vue Loading 加载动画组件测评与推荐 - 穷尽市面上所有加载动画效果(Vue loader)类型

    本文完整版:<7 种最棒的 Vue Loading 加载动画组件测评与推荐> 目录 7 种不同类型的 Vue Loading 加载动画组件 1. Vue Simple Spinner - ...

最新文章

  1. 学习理发去哪里_作为女性,学习运维工程师去哪里好
  2. Android --- no module 问题
  3. 《D3.js数据可视化实战手册》——2.5 使用子选择器
  4. 【OpenCV 例程200篇】15. 图像的加权加法(cv2.addWeight)
  5. windbg调试HEAP
  6. python中可迭代对象,迭代器,生成器,协程
  7. java timeout超时不抛异常_springCloud 请求超时解决方案 java.net.SocketTimeOut Exception: Read time out 异常解决...
  8. oracle trunc()函数用法
  9. (三十九)数据的持久化存储-plist实现(XML属性表)
  10. HW浮动静态路由及负载均衡
  11. python自动化办公手册之python操作PPT
  12. java开发微信公众号退款_微信公众号退款开发
  13. UOJ #449. 【集训队作业2018】喂鸽子
  14. 解决Server returned HTTP response code: 403 for URL报错
  15. syzlang语法编写案例学习 —— Looking for Remote Code Execution bugs in the Linux kernel
  16. 微信群舆情怎么监测?
  17. 视觉检测设计与实践答题卡检测实验报告
  18. 为什么这些照片连最强大的视觉AI也无法准确识别?
  19. 小程序如何转App?
  20. 舔狗【2019河北省大学生程序设计竞赛 J题】

热门文章

  1. 大学毕业后拉开差距的原因 有可能影响你一生
  2. macos 10.15.3 安装vim+python3 +ycm自动补全+第三方库补全
  3. Mac+Docker+K8S本地搭建K8S集群
  4. ocx控件注册失败常见问题
  5. 中标普华linux桌面初始密码,中标普华桌面4.0快速指南
  6. Linux磁盘命令之lsblk命令
  7. ORA-00918: 未明确定义列
  8. c++【IO挂】【输入输出挂】
  9. jmeter性能测试面试题一【多测师_王sir】
  10. 频上热搜,微博坐拥2700万+粉丝,李子柒为何能够持续大火?