我使用的比较多的是阿里的ant-design-vue组件库。
在这里好像没有找到太好用的全局loading。
组件库没有,那就自定义一个吧,主要是定义成啥样的呢?嗯……layui没黄之前,他那个loading我甚是喜欢,就整他了。
我这里使用的是VUE3.2+typescript,上代码:
loading.vue
<template> <div class="loading" v-show="msg?.show"> <div> <!-- <img src="@/assets/images/loading.gif" alt="" srcset="" /> --> <img src="/src/assets/img/loading-0.gif" alt="" srcset="" /> </div> </div> </template> <script lang="ts"> export default { props: { msg: Object, aaa: Number, }, }; </script> <style scoped lang="scss"> .loading { width: 100%; height: 100%; // background-color: rgba(0, 0, 0, 0.2); position: fixed; top: 0; left: 0; display: flex; justify-content: center; align-items: center; z-index: 1000000000000000000000000; div { color: #fff; padding: 6px 15px; } } </style>
loading.ts
import { createApp, reactive } from 'vue' import myLoad from '/@/components/loading/loading.vue' // 引入公共js文件 import utils from "/@/assets/js/public/function"; const msg = reactive({ show: false, title: '拼命加载中...' }) const $loading = createApp(myLoad, {msg}).mount(document.createElement('div')) // console.log($loading); export const load = { show(title:any = '') { // 控制显示loading的方法 msg.show = true msg.title = title document.body.appendChild($loading.$el) }, hide(time:number = 1000) { // 控制loading隐藏的方法 // 延迟 1秒 utils.sleep(time).then(() => { msg.show = false }); } } // export { load } // export default { // install(app) { // // console.log(app); // // Vue.prototype.$http = axios // app.config.globalProperties.$loading = load // } // }
utils.sleep
/** * @name: 程序停止执行时间(睡一会儿) * @author: camellia * @email: guanchao_gc@qq.com * @date: 2020-12-21 * @param: time number 显示时间 */ sleep(time: number) { return new Promise((resolve) => setTimeout(resolve, time)); // utils.sleep(500).then(() => { // // 这里写sleep之后需要去做的事情 // console.log(router.currentRoute.value); // }); }
调用:
1:引入
import { load } from "/@/components/loading/loading";
2:调用
load.show(); load.hide();
最终效果我这里就不做展示了,有兴趣可以自己尝试一下。
有好的建议,请在下方输入您的评论。