当前位置: 首页 > article >正文

css + js 超好看的消息提示

先看图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

css 使用了layui,直接在官网下载引入即可

  • 实现的功能
  1. 自定义消息弹出位置
  2. 自定义消息类型
  3. 自定义消息关闭时间
  4. 消息弹出关闭动画
<style>
			.message {
				width: 300px;
				/* background-color: rgba(0, 0, 0, 0.2); */
				background-color: rgba(255, 255, 255, 0.7);
				animation: fadeIn 0.5s ease-out forwards;
			}

			@keyframes fadeIn {
				from {
					opacity: 0;
					transform: translateY(-10px);
				}

				to {
					opacity: 1;
					transform: translateY(0);
				}
			}

			.hide {
				animation: fadeOut 0.5s ease-out forwards;
			}

			@keyframes fadeOut {
				from {
					opacity: 1;
					transform: translateY(0);
				}

				to {
					opacity: 0;
					transform: translateY(-10px);
				}
			}
		</style>
```<body>
		<div class="flex justify-center m">
			<button class="px-2 py text-white bg-info border-0 m" onclick="showMessage('基础', {
				type: 'info',
				place: 'lt',
				time: 1500
			})">基础</button>
			<button class="px-2 py text-white bg-success border-0 m" onclick="showMessage('成功', {
				type: 'success',
				place: 'rt',
				time: 1500
			})">成功</button>
			<button class="px-2 py text-white bg-error border-0 m" onclick="showMessage('失败', {
				type: 'danger',
				place: 'tc',
				time: 1500
			})">失败</button>
			<button class="px-2 py text-white bg-warning border-0 m" onclick="showMessage('警告', {
				type: 'warning',
				place: 'c',
				time: 1500
			})">警告</button>
		</div>
		<script>
			// 显示消息
			function showMessage(message, info = {
				type,
				place,
				time
			}) {
				const type = info.type || 'info',
					fixed = info.place || 'c',
					time = info.time || 1500;

				const messageConfig = {
					success: {
						icon: "layui-icon-ok",
						color: "#4cae4c"
					},
					warning: {
						icon: "layui-icon-tips",
						color: "#f58025"
					},
					danger: {
						icon: "layui-icon-close",
						color: "#FF5733"
					},
					info: {
						icon: "layui-icon-star",
						color: "#007bff"
					}
				}
				
				const classList = {
					messageBox: ['message', 'relative', 'text-center', 'rounded-sm', 'py', 'px-1', 'm-1', 'opacity', 'shadow-sm'],
					iconBox: ['layui-icon', messageConfig[type].icon],
					fixed: {
						lt: {
							box: ['top-0', 'left-0', 'right-0'],
							messageBox: []
						},
						rt: {
							box: ['top-0', 'left-0', 'right-0'],
							messageBox: ['ml-auto']
						},
						lb: {
							box: ['bottom-0', 'left-0', 'right-0'],
							messageBox: []
						},
						rb: {
							box: ['bottom-0', 'left-0', 'right-0'],
							messageBox: ['ml-auto']
						},
						tc: {
							box: ['top-0', 'left-0', 'right-0'],
							messageBox: ['ml-auto', 'mr-auto']
						},
						c: {
							box: ['top-0', 'left-0', 'right-0', 'bottom-0', 'flex', 'justify-center', 'items-center'],
							messageBox: []
						}
					}
				}
				
				// 最外部盒子
				const box = document.createElement('div');
				box.id = 'message_box_mask';
				// 创建外部dom
				const messageBox = document.createElement('div');
				// 然后创建图标dom
				const iconBox = document.createElement('i');
				// 创建消息提示dom
				const textBox = document.createElement('span');
				
				
				box.classList.add('fixed');
				// 给这个div添加基础样式
				classList.messageBox.forEach(e=>{
					messageBox.classList.add(e);
				})
				
				// 为外部div添加消息提示类型的样式
				messageBox.style.color = messageConfig[type].color;
				
				// 添加图标class
				classList.iconBox.forEach(e=>{
					iconBox.classList.add(e);
				})

				// 文本距离图标间距
				textBox.classList.add('ml')
				// 插入文本
				textBox.textContent = message;
				// textBox.innerHTML = message;
				
				// 消息提示定位
				if( classList.fixed[fixed]?.box.length > 0 ) {
					classList.fixed[fixed].box.forEach(e=>{
						box.classList.add(e);
					})
				}
				
				// 判断是否存在消息box样式
				if( classList.fixed[fixed]?.messageBox.length > 0 ) {
					classList.fixed[fixed].messageBox.forEach(e=>{
						messageBox.classList.add(e);
					})
				}

				messageBox.appendChild(iconBox);
				messageBox.appendChild(textBox);
				box.appendChild(messageBox);
				document.body.appendChild(box);
				
				setTimeout(() => {
					hideMessage(box);
				}, time);
			}
			
			// 关闭消息
			function hideMessage(dom = null) {
				const box = dom || document.getElementById('message_box_mask');
				box.lastChild.classList.add('hide');
				setTimeout(() => {
					box.remove();
				}, 500);
			}
		</script>
	</body>

http://www.kler.cn/a/2375.html

相关文章:

  • 多目标优化常用方法:pareto最优解
  • 3D工具显微镜的测量范围
  • 多智能体/多机器人网络中的图论法
  • VS Code Copilot 与 Cursor 对比
  • 二叉搜索树Ⅲ【东北大学oj数据结构8-3】C++
  • SLURM资料
  • Python数据分析script必备知识(一)
  • 银行数字化转型导师坚鹏:基于招商银行案例研究的银行APP运营
  • Ubuntu-C语言下的应用
  • c#实现视频的批量剪辑
  • AI 未来已至,向量数据库站在新的节点上
  • 【C语言进阶:刨根究底字符串函数】 strstr 函数
  • 【蓝桥杯】 C++ 数字三角形 动态规划 ⭐⭐
  • 方向导数与梯度
  • 【Linux】多线程
  • OpenCV入门(十八)快速学会OpenCV 17 直线检测
  • 幸福的烦恼:显卡算力太高而pytorch版本太低不支持
  • Power BI利用Python和Sql Server制作实时看板
  • nginx快速入门.跟学B站nginx一小时精讲课程笔记
  • 【百面成神】多线程基础16问,你能坚持到第几问
  • 技术人的管理学-业务管理
  • 扒一扒抖音是如何做线程优化的
  • Markdown常用语法(字体颜色)
  • Python生日蛋糕
  • 网络协议分析期末复习(四)
  • 【vue2】使用vue常见的业务流程与实现思路