一个简单的气泡弹窗制作

前言

在表单校验、接口请求反馈场景,我们经常需要轻量的顶部 toast 气泡提示:操作成功展示绿色提示,失败展示红色警告,2 秒之后自动消失。很多同学第一反应引入 Element UI、Layer 等第三方弹窗组件。但小型项目不想引入额外库,我们完全可以原生 HTML+CSS+jQuery 手写一套轻量消息气泡。

本文就基于手写的成功 / 错误顶部提示框完整代码,讲解实现思路、样式细节、业务坑点、优化方案。

技术栈:HTML + CSS + jQuery 效果:页面顶部悬浮提示,成功绿色,错误红色,2 秒自动关闭。

完整原始代码

HTML 结构

复制代码
<!-- 成功提示框 修改图片路径 -->
<div id="success">
    <div class="successCenter">
        <img id="successImg" src="./yes.png" alt="" />
        <span class="successText"></span>
    </div>
</div>

<!-- 错误提示框 -->
<div id="error">
    <div class="errorCenter">
        <img id="errorImg" src="./error.png" alt="" />
        <span class="errorText"></span>
    </div>
</div>

结构说明:

  1. 外层#success / #error:fixed 定位,控制整体显示隐藏;
  2. 内部successCenter/errorCenter:flex 容器,放图标 + 文字;
  3. img 为状态图标,span 用来动态填充提示文本。

CSS 样式

复制代码
/*成功弹窗*/
.successText {
    color: #28C445;
    font-family: YouYuan;
}

/* 错误弹窗 */
#error {
    z-index: 51;
    width: 100%;
    height: 35px;
    display: flex;
    top: 10vh;
    position: fixed;
    justify-content: center;
    align-items: center;
    display: none;
}

#errorImg {
    margin-right: 5px;
    width: 15px;
    height: 15px;
}

.errorCenter {
    padding: 0 10px;
    display: flex;
    align-items: center;
    border-radius: 6px;
    justify-content: center;
    height: 35px;
    background-color: rgb(254, 238, 238);
}

.errorText {
    color: #e70a0a;
    font-family: YouYuan;
}

注意:代码中#error写了两次 display 属性,后面display:none会覆盖前面display:flex;页面初始化默认隐藏弹窗。success 弹窗 CSS 和 error 结构保持一致,修改颜色背景即可。

JavaScript 业务函数

复制代码
// 弹窗显示函数
/**
 * 成功 失败弹窗函数
 * 直接调用函数名 然后传入要显示的文字
 * @param {string} message - 弹窗显示的文字
 */

// 成功弹窗
function showSuccess(message) {
    $(".successText").html(message);
    $("#success").css('display', 'flex');
    setTimeout(function () {
        $("#success").css('display', 'none');
    }, 2000);
}

// 失败弹窗
function showError(message) {
    $(".errorText").html(message);
    $("#error").css('display', 'flex');
    setTimeout(function () {
        $("#error").css('display', 'none');
    }, 2000);
}

使用方式

复制代码
//业务中直接调用
showSuccess("提交成功!");
showError("请上传图片");

实现思路拆解

  1. 定位方案 :position:fixed; top:10vh; width:100%,固定在视口顶部,不受页面滚动影响;外层 100% 宽度,内部容器 flex 水平居中。
  2. 显示隐藏 :通过display:none / flex切换;display:flex 保证内部图标文字 flex 布局。
  3. 动态文本 :jQuery.html()把传入消息填充到 span 标签。
  4. 自动关闭 :setTimeout定时器 2000 毫秒后把 display 设置为 none,实现自动消失。
  5. 视觉区分:成功绿色文字 + 浅绿背景,错误红色文字 + 浅红背景,搭配图标,用户一眼区分状态。

总结

  1. 简单消息气泡弹窗核心技术点:position:fixed悬浮定位 + display 控制显隐 + setTimeout 自动关闭;
  2. 多次调用弹窗,一定要清除旧定时器,否则会出现弹窗消失时机错乱 bug;
  3. 不要写两套几乎一样 HTML/CSS,用 class 做类型区分,降低维护成本;
  4. z-index 设置足够大,防止弹窗被页面其他元素遮挡;
  5. 追求更好体验,可以使用 opacity+transition 实现淡入动画,摒弃粗暴 display 切换。
相关推荐
paopaokaka_luck15 分钟前
个人综合管理小程序(echarts数据看板、健康数据记录与趋势查看、目标拆解和进度管理、日程待办与番茄钟、习惯打卡、收支统计、个人生活记录、跨模块智能提醒)
前端·javascript·spring·小程序·数据分析·echarts·生活
福兮说8 小时前
前端下载大文件,点了按钮半天没反应:fetch + blob 的三个问题和三种替代写法
前端·javascript·性能优化·文件下载
今年下半年11 小时前
【VUE】整合腾讯地图、自定义区域边界、村委名称及资产统计(放大显示资产点位)
前端·javascript·vue.js
可乐鸡翅yeah_13 小时前
hls.js 切换多个视频源,新手开发常见踩坑
开发语言·前端·javascript·ios·ffmpeg·音视频·safari
kyriewen14 小时前
我实测了前端日期的 5 个坑:差 8 小时只是开始
前端·javascript·程序员
anew___14 小时前
《从零手写操作系统 (11):文件系统初探——initrd与VFS抽象层》
java·javascript·算法
今年下半年14 小时前
【VUE3】移动端:使用腾讯地图显示区域统计与放大显示资产点位
javascript·前端框架·vue·地图
a努力。14 小时前
LangChain Agent消息链路全解析
java·前端·javascript
今年下半年14 小时前
【前端】ant-design-vue 表格「行、列都动态」的处理方案
前端·javascript·vue.js
默_笙15 小时前
🚕 缺料就出门买:给 RAG 装上"信息够不够"的判断力
前端·javascript