如果让我实现一个v-loading,我该怎么办?

news/2024/11/22 14:51:13/

1、首先肯定要写出一个loading加载动画了
waiting.vue文件

<template><div class="waiting_div"><div class="background_div"><!-- iconfont icon-jiazaidonghua 为我自己的字体图标,可自行替换,不想替换就用下面的加载文字 --><span class="iconfont icon-jiazaidonghua"></span><!-- <span class="iconfont">加载---</span> --></div></div>
</template>
<script setup>
</script><style scoped lang="less">.waiting_div {//注意了,我把它隐藏了!!!!!!!!!!!!visibility: hidden;position: fixed;.background_div {background-color: #fff;opacity: 0.8;width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;.iconfont {font-size: 50px;color: #297aff;animation: icon_rotate 1.5s ease-in-out infinite alternate-reverse;}}}@keyframes icon_rotate {0% {transform: rotate(0deg);}100% {transform: rotate(480deg);}}
</style>

2、注册自定义指令v-waiting

v_directive.js文件

// 注册vue自定义指令工具/*** el 绑定元素dom* val 绑定的值* vnode */
let _ = {}
//设置waiting元素的样式,根据目标taregt样式进行设置
const set_waiting_style = (waiting_dom, target = {}) => {const bound = target.getBoundingClientRect()const { height, left, width, top } = boundwaiting_dom.setAttribute('style', `width:${width}px;height: ${height}px;left:${left}px;top:${top}px;visibility:visible;`)
}
//清除waiting元素的样式,让其继续保持隐藏
const clear_waiting_style = (waiting_dom) => {if (waiting_dom) {waiting_dom.setAttribute('style', `visibility:hidden;`)}
}
// 自定义等待loading   v-waiting指令
//我个人是不推荐页面同时有多个loading的
const waiting = (Vue) => {Vue.directive('waiting', (el, val, vnode) => {if (val.value) {if (!_.waiting_dom) {const waiting_dom = document.querySelector(".waiting_div")_.waiting_dom = waiting_dom}set_waiting_style(_.waiting_dom, el)} else {clear_waiting_style(_.waiting_dom)return}})
}const v_directive = (Vue) => {waiting(Vue)
}export {v_directive
}

3、使用
main.js挂载自定义指令

import { createApp} from 'vue'
import App from './App.vue'
//...
//@utils/vue_instruct,是我自己的文件路径,@utils是我配置的快捷地址
import { v_directive } from '@utils/vue_instruct'//...
const app = createApp(App)
app.use(router).use(v_directive).mount('#app')

app.vue使用loading组件


<template><div class="contain" v-waiting="loading"><!-- 在app.vue任意位置引入一次即可  --><waiting /></div>
</template>
<script setup>import waiting from "@/components/card/waiting.vue";import { onMounted, ref } from "vue";onMounted(() => {setTimeout(() => {loading.value = false}, 2000);});const loading = ref(true);
</script><style scoped lang='less'>.contain{height:600px}
</style>

效果截图:
在这里插入图片描述

4、问题:
不能同时存在多个loading:我个人的建议是一个页面尽量确保只有一个loading正在运行(并非只能写一个v-waiting,而是确保只有一个v-waiting正在运行),多个loading动画同时运行时。
如果非要同时运行多个loading,解决方案:
无需在app.vue中引入waiting 组件,而是在v_directive.js引入waiting组件,并且在绑定的loading值为false时移除waiting组件,在值为true时,向body或者某个元素上插入waiting组件
页面多个loading改为一个loading,解决方案:
有多个loading,无非是因为我们调取了多个接口,不想再接口数据未返回的时候让用户进行操作,建议用Promise.all进行解决。拿到所有接口成功的回调,再loading=false


http://www.ppmy.cn/news/292598.html

相关文章

c# 读写锁

//读写锁是一种多线程同步机制&#xff0c;它允许多个线程同时读取共享资源&#xff0c;但只允许一个线程写入共享资源。 //读写锁可以提高并发性&#xff0c;因为多个线程可以同时读取共享资源&#xff0c;而不会相互干扰&#xff0c;从而提高程序的性能。 //读写锁的实现通常…

计算机英语(1-30)

每日更新&#xff1a;https://blog.csdn.net/qq_41880352/article/details/94288895 目录 1、3G 2、404 Error 3、4G 4、4K 5、802.11a 6、3D Printer 7、802.11ac 8、802.11b 9、802.11g 10、802.11n 11、Abend 12、Access 13、Access Point 14、ACL 15、Acti…

ZEPPELIN部署接入华为云MRS

ZEPPELIN部署接入华为云MRS 安装zeppelin配置Spark连接常见问题连接pg报错 Py4JJavaError: An error occurred while calling o779.load. : org.postgresql.util.PSQLException: The authentication type 5 is not supported. Check that you have configured the pg_hba.conf …

java ssm贸易平台-物流管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm贸易平台-物流管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主…

知识变现只需搞定4个环节,没你想的那么难!

哈喽&#xff0c;大家好&#xff0c;我是海哥&#xff0c;知识付费变现创业教练&#xff0c;教育公司培训总监&#xff0c;从事知识付费变现咨询10年&#xff0c;已助力3000人实现知识付费变现。 知识变现其实非常简单&#xff01; 大家只-需要搞定4个步骤&#xff0c;你就可以…

油炸锅EN/IEC60335 CE认证标准介绍

油炸锅属于厨房电器的一种&#xff0c;厨房安全被多国重视&#xff0c;下面介绍一下油炸锅的检测要求。 国内&#xff1a;质量检测报告 测试标准&#xff1a;GB4706.56-2008 测试要求&#xff1a;样品一个、申请表、产品说明书 欧盟&#xff1a;CE认证 测试标准&#xff1a;EN6…

8ms嵌入式开发平台作品打卡(2)——空气炸锅

最近发现了一个很适合我这种新手小白使用的嵌入式开发平台&#xff1a;8ms。今天尝试在上面做了一个基于Sigmastar硬件平台的空气炸锅的UI&#xff0c;迫不及待地想分享给C站上的小伙伴们。喜欢的话记得收藏和点赞哦&#xff01; 这次设计的UI界面是空气炸锅&#xff0c;主要运…

今日分享|闪魔钢化膜5.8又来了/iPhone数据线2条10.8/adidas三叶草同款89/空气炸锅/内裤3条14.9/更多...

闪魔来了&#xff0c;牌子货 钢化膜都是消耗品囤起来准没错&#xff01; 千万别错过&#xff01;【券后价】5.80元注意&#xff0c;请完整复制这条信息 - 淘口令 - &#xffe5;p1il1ypL3Et&#xffe5; 到【手机淘宝】即可查看 古尚古iPhone苹果数据线 织布拉线&#xff0c;纯…