vue3.x全局toast、message、loading组件

vue3.x全局toast、message、loading组件

    • Toast组件
    • loading

Toast组件

  • 在 src/components下创建toast文件夹,并依此创建index.vue和index.js

1、index.vue
一般toast会有如下功能:背景色、字体颜色、文本、停留时间

<template>
<div class="toast-box" ><p class="toast-value" :style="{background: background, color: color}">{{ value }}</p> 
</div>
</template>    
<script>import { defineComponent } from 'vue'export default defineComponent({name: 'Toast',props: {value: {type: String,default: ''},duration: {type: Number,default: 3000},background: {type: String,default: '#000'},color: {type: String,default: '#fff'}}})
</script><style>
.toast-box  {position: fixed;width: 100vw;height: 100vh;top: 0;left: 0;display: flex;align-items: center;justify-content: center;z-index: 1000;
}.toast-value {max-width: 100px;background: rgb(8, 8, 8);padding: 8px 10px;border-radius: 4px;text-align: center;display: inline-block;animation: anim 0.5s;}@keyframes anim { 0% {opacity: 0;}100%{opacity:1;}}.toast-value.remove{animation: remove 0.5s;}@keyframes remove { 0% {opacity: 1;}100%{opacity:0;}}
</style>

2、index.js 导出Toast方法

  • 创建
    首先使用createVNode方法创建一个vNode独享
    使用render方法转换成真实dom
    添加到body

  • 销毁
    首先添加一个淡入淡出效果
    使用render将真实设置为null
    移除创建的dom

以下代码为TS写法,不支持部分去掉代码即可

import { createVNode, render } from 'vue'
import toastTemplate from './index.vue'
export interface IProps {value?: string;duration?: number;background?: string;color?: string;
}
const defaultOpt = { // 创建默认参数duration: 3000
}export interface ResultParams {destory?: () => void;
}
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
const Toast = (options: IProps):ResultParams => {const container = document.createElement('div')const opt = {...defaultOpt,...options}const vm = createVNode(toastTemplate, opt) // 创建vNoderender(vm, container)document.body.appendChild(container)       // 添加到body上const destory =  ()=> {const dom = vm.el as HTMLDivElementif(dom.querySelector('.toast-value')) {dom.querySelector('.toast-value')?.classList.add('remove') // 销毁时添加淡入淡出效果const t = setTimeout(() => {             // 淡入淡出效果之后删除dom节点render(null, container)document.body.removeChild(container)clearTimeout(t)},500);} }if(opt.duration) {                            // 如果传入的值为0可以持续保留在页面,需要手动销毁const timer = setTimeout(()=> {destory()clearTimeout(timer)}, opt.duration)}return {destory}
}
export default Toast

3、main.js插件全局引入

import Toast from '@/components/Toast/index'app.config.globalProperties.$toast = Toast;
// app.use(Toast) 用use来全局载入会导致我们不能使用this的地方不太好调用。

4、使用

this.$toast({value: 'toast',duration: 0, // 如果大于0则不必使用destory方法background: '#000',color: '#fff'
})
setTimeout(() => {this.$toast.destory && this.$toast.destory()
}, 2000)

setup内使用

import { getCurrentInstance} from 'vue'setup() {const { proxy } = getCurrentInstance();const showToastEvent = () => {proxy.$toast({value: 'toast',duration: 1000,background: '#000',color: '#fff'})}return {showToastEvent,}
}

loading

<template><div class="loading">加载中...</div>
</template><script>export default {name: "loading",}
</script><style scoped>.loading {position: fixed;left: 50%;top: 50%;background-color: rgba(0, 0, 0, 0.2);color: white;transform: translate(-50%, -50%);border-radius: 4px;padding: 8px 10px;z-index: 1000;}
</style>
import { createApp } from "vue"import Loading from './loading.vue'export default {instance: null,parent: null,times: 0, // 为了保证多个同时loading的时候,只显示一个,并且需要全部close之后才消失open() {if (this.times == 0) {this.instance = createApp(Loading)this.parent = document.createElement("div")let appDom = document.getElementById('app')appDom.appendChild(this.parent)this.instance.mount(this.parent)}this.times ++},close() {this.times --if (this.times <= 0) {this.times = 0let appDom = document.getElementById('app')this.instance.unmount(this.parent)appDom.removeChild(this.parent)}}
};
import loading from '@/components/loading/index'
app.config.globalProperties.$loading = loading;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知天命

吾乃浑浑噩噩、后知后觉之人。 今欲窥天命之道。天命&#xff0c;何也&#xff1f; 天之命乎&#xff0c;或人之道乎&#xff1f; 人生于此世。 盲从于世上&#xff0c;依其欲而行&#xff0c;乃天之命也。 人可存之世上仅百载&#xff0c;终白土亦。 随意欲而为&#xff0c;应…

教程:在 VM Depot 中查找 Azure 可用的虚拟机镜像

&#xfeff;&#xfeff;发布于 2014-07-08 作者 陈 忠岳 对于 Azure 的社区管理虚拟机资源库——VM Depot——的用户来说&#xff0c;网站的搜索功能已得到极大的改善。这一搜索能力的增强&#xff0c;可以帮助用户更容易地找到 Azure 可用的开源 Linux 虚拟机。 搜索发现 …

HDU 1203 I NEED A OFFER!(01背包)

I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9932 Accepted Submission(s): 3687 Problem DescriptionSpeakless很早就想出国&#xff0c;现在他已经考完了所有需要的考试&#xff0c;准备了…

H5实现微信摇一摇功能

//摇一摇<script type"text/javascript"> var num 1; var SHAKE_THRESHOLD 2000; var last_update 0; var x y z last_x last_y last_z 0; function init() { if (window.DeviceMotionEvent) { window.addEventListener(devicemotion, deviceMotionHan…

PHP起点 - 运算符

一.算术运算符 名称    操作符    举例 加法          $a $b 减法     -      $a - $b 乘法     *     $a * $b 除法运算   /      $a / $b 取余运算   %     $a % $b 递增运算        $a, $a 递减运算  …

Java I/O流

字符流&#xff1a; Reader&#xff1a;用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。 |---BufferedReader&#xff1a;从字符输入流中读取文本&#xff0c;缓冲各个字符&#xff0c;从而实现字符、数组和行的高效读取。 可以指定缓冲区…

java中跨时区的日期格式转换

2019独角兽企业重金招聘Python工程师标准>>> 先上一段代码 public class DataTransfer {public static void main(String[] args) {String dateStr "Sep 30, 2014 12:00:00 AM";SimpleDateFormat sdf new SimpleDateFormat();sdf.applyPattern("MM…

Asp.net WebForm中应用Jquery EasyUI Layout

Asp.net WebForm中应用Jquery EasyUI Layout 按照EasyUI文档中的示例&#xff0c;编写layout代码&#xff1a; <body class”easyui-layout”> <div region"north" border"false" style"height:60px;background:#B3DFDA;">north reg…

C语言读取写入CSV文件 [二]进阶篇——写入CSV文件

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 本系列文章目录 [一] 基础篇 [二] 进阶篇——写入CSV [三] 进阶篇——读取CSV 什么是 包裹&#xff08;使用双引号&…

ABAP 数值四舍五入函数

DATA : dat TYPE p DECIMALS 9 VALUE 12.5445 ,dat1 TYPE p DECIMALS 9 .DATA dat2 TYPE p DECIMALS 9 VALUE 12.540.* 方法一 CALL FUNCTION HR_NZ_ROUNDING_DECIMALSEXPORTINGvalue_in datconv_dec 2 " 设置保留几位小数IMPO…

K8S中部署apisix(非ingress)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 不使用pvc的方式在K8S中部署apisix-gateway 简介 因为公司项目准备重构&#xff0c;现在做技术储备&#xff0c;之前公司项…

MVC3 URL 数据绑定

从数据库中取出的Int类型的ID&#xff0c;在Razor视图中显示的链接地址格式为:http://localhost:1846/news/Detail/1 Router格式&#xff1a;{controller/action/id} 数据库中对应的字段为ID,对应的Action中的参数名也必须为ID 否则 编译器会报参数值为Null的错误。 当数据库中…

机器学习理论知识部分--偏差方差平衡(bias-variance tradeoff)

摘要&#xff1a; 1.常见问题 1.1 什么是偏差与方差&#xff1f; 1.2 为什么会产生过拟合&#xff0c;有哪些方法可以预防或克服过拟合&#xff1f; 2.模型选择例子 3.特征选择例子 4.特征工程与数据预处理例子 内容&#xff1a; 1.常见问题 1.1 什么是偏差与方差&#xff1f; …

MVC中获取模型属性的Range和StringLength验证特性设置

MVC中的客户端及服务端模型验证信息都以ModelMetadata类型作为承载&#xff0c;在获得属性的ModelMetadata之后&#xff08;还不知道怎么获取ModelMetadata的童鞋请自行恶补&#xff09;&#xff0c;我们可以轻松得到一些我们在模型中定义的特性&#xff0c;比如显示名称、是否…

有手就行3——持续集成环境—maven、tomcat、安装和配置

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 有手就行3——持续集成环境—maven、tomcat、安装 持续集成环境**(5)-Maven****安装和配置** 持续集成环境(6)-Tomcat安装…

隐藏Content-Location标头带的内部IP地址的执行语句以及其可能会带来的问题

用IIS发布的系统&#xff0c;利用各种检测工具&#xff0c;可以获取到页面的请求头的信息&#xff0c;里面会带有服务器IP等保密信息。 为了避免服务器IP地址等这种信息别的工具检测到&#xff0c;导致安全隐患。可以在CMD中执行以下语句&#xff1a; cscript c:\\inetpub\admi…

unity获取ugui上鼠标位置

public class GetMousePos : MonoBehaviour {public Canvas canvas;//画布private RectTransform rectTransform;//坐标void Start(){canvas GameObject.Find("Canvas").GetComponent<Canvas>();rectTransform canvas.transform as RectTransform; //也可以写…

netty框架

Netty 提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发高性能、高可靠性的网络服务器和客户端程序。Netty是一个NIO客户端 服务端框架。允许快速简单的开发网络应用程序。例如&#xff1a;服务端和客户端之间的协议。它最棒的地方在于简化了网络编程规范…

stm32中stm32f10x_type.h(固件3.0以前)、stm32f10x.h(固件3.0以后)、stdint.h文件的关系

在stm32f10x的3.5固件库中stm32f10x.h有以下代码&#xff08;第478行开始&#xff09;&#xff1a; /*** }*/#include "core_cm3.h" #include "system_stm32f10x.h" #include <stdint.h>/** addtogroup Exported_types* {*/ /*!< STM32F10x Stan…

.netcore基础知识(一)

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 先来说说web服务器 先来一张图 一个典型的进程外托管模型 我们先看kestrel这一部分 我们在它前面放了一个方向代理服务器n…