自定义消息提示message

这个组件,antd是有的,因为项目要求的两个原因自定义
1:antd的message即使你设定消失时间1秒,鼠标悬浮在消息上,消息就不会消失
2:ts模式下,antd组件库的message组件的type(填任意一项就会有图标)为必填项,本项目存在不显示图标的情况
Message.ts

/*
 * @Name:自定义消息提示
 * @Author: 刘强
 * @Date: 2021-05-26 15:06:32
 * @LastEditors: 刘强
 * @LastEditTime: 2021-09-09 11:03:29
 * @Description:-引入ts后,antd组件库的message组件的type为必填项,不适用本项目
 * @type:default默认灰色,error,info
 */
// 错误码转换
import "../../../style/comm/message.less";
const errText = {
	'the server responded with a status of 403': '服务器的响应状态为403',
	'the server responded with a status of 404':'服务器的响应状态为404',
	'Request failed with status code 504': '请求失败,状态代码504',
	'Request failed with status code 503': '请求失败,服务器正在更新',
	'Request failed with status code 502': '请求失败,状态代码502',
	'Request failed with status code 501': '请求失败,状态代码501',
	'Request failed with status code 500': '请求失败,状态代码500',
	'Request failed with status code 404':'请求失败,状态代码404',
	'Network Error': '网络错误',
	'timeout of 10000ms exceeded': '请求超时',
};

const Message = (content: string, time?: number, type?: string) => {
	content = errText[content] ? errText[content] : content;
	// 销毁超出显示数量的消息 最多10条
	let arr = document.getElementsByClassName('ui-message-bg');
	if (arr.length === 10) {
		try {
			window.document.body.removeChild(arr[0]);
		} catch (error) {}
	}
	//消息类型
	type = type === undefined ? 'default' : type;
	// 生成消息
	let obj = document.createElement('div');
	let achilddv = document.createElement('div');
	// 判定类型
	switch (type) {
		case 'default':
			achilddv.innerHTML = content;
			achilddv.className = 'ui-message-content';
			break;
		case 'error':
			achilddv.className = 'ui-message-content ui-message-white';
			achilddv.innerHTML =
				'<i class="iconfont iconfail" style="color:#FF656B;"></i>' +
				content;
			break;
		case 'info':
			achilddv.className = 'ui-message-content ui-message-white';
			achilddv.innerHTML =
				'<i class="iconfont iconsuccess" style="color:#007AFF;"></i>' +
				content;
			break;
	}
	obj.className = 'ui-message-bg';

	window.document.body.appendChild(obj);
	obj.appendChild(achilddv);
	if (time === undefined || time === null) time = 1500;
	let maxTime = time + 500;
	// 使用500毫秒产生动画
	setTimeout(() => {
		obj.style.cssText = 'animation-name: message-hidden;';
	}, time);
	// 销毁组件
	setTimeout(() => {
		try {
			window.document.body.removeChild(obj);
		} catch (error) {}
	}, maxTime);
};

export default Message;


css

.ui-message-bg{
     display: flex; 
     justify-content: center;
     position: fixed;
     z-index:2021;
     width:100%;
     animation-name: message-show;
     animation-duration: 0.3s;
     animation-fill-mode:forwards
}
.ui-message-content{
    background: #3D3F47;
    color: #f9f9f9;
    padding: 14px 30px; 
    border-radius: 4px;
    font-size: 14px;
    font-family: PingFangSC, PingFangSC-Regular;
}
@keyframes message-show {
  0%   {top: 17px;opacity: 0}
  25%  {top: 34px;opacity: 0.25}
  50%  {top: 51px;opacity: 0.50}
  100% {top: 68px;opacity: 1}
}
@keyframes message-hidden {
  0%   {top: 68px;opacity: 1}
  25%  {top: 51px;opacity: 0.50}
  50%  {top: 34px;opacity: 0.25}
  100% {top: 17px;opacity: 0}
}

自定义后不但满足项目要求,使用方式也变得更为简单,整个项目代码都减少了很多

antd
import {  message } from "antd";
message.open({
		className: "white_theme",//项目要求,必填
		icon: "",//项目要求,必填
		content: "您当前已在会议中,暂无法加入其它会议",
		duration: 2,// 默认3秒,应项目要求必填2
});
自定义	
import message from "../comm/message";
message("测试消息")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在uniapp中,可以通过自定义组件来实现自定义消息提示框。以下是一个示例: 1. 创建一个名为 `MessageDialog` 的自定义组件,在components文件夹下创建一个名为 `MessageDialog.vue` 的文件。代码如下: ```vue <template> <div class="message-dialog" v-show="show"> <div class="message-content"> <p>{{ message }}</p> <button @click="hide">关闭</button> </div> </div> </template> <script> export default { props: { message: { type: String, default: '' } }, data() { return { show: true } }, methods: { hide() { this.show = false; } } } </script> <style scoped> .message-dialog { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; } .message-content { background-color: white; padding: 20px; border-radius: 5px; } .message-content p { margin-bottom: 10px; } .message-content button { background-color: #e5e5e5; border: none; padding: 8px 16px; } </style> ``` 2. 在需要使用消息提示框的地方,引入 `MessageDialog` 组件,并在需要的时候使用该组件进行消息提示。例如,在一个页面的 `script` 部分: ```javascript import MessageDialog from '@/components/MessageDialog.vue'; export default { components: { MessageDialog }, data() { return { showMessage: false, message: '' } }, methods: { showCustomMessage() { this.message = '这是一个自定义消息提示框'; this.showMessage = true; } } } ``` 3. 在模板中使用 `MessageDialog` 组件,例如: ```vue <template> <div> <button @click="showCustomMessage">显示消息提示框</button> <MessageDialog :message="message" v-show="showMessage" /> </div> </template> ``` 通过点击 "显示消息提示框" 按钮,就可以显示自定义消息提示框了。你可以根据需要修改消息提示框的样式和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值