html消息提示框封装,默认,失败,警告,成功四个状态

发布于:2025-07-27 ⋅ 阅读:(17) ⋅ 点赞:(0)

 

 

message.none("请输入用户名");
message.error("请输入搜索内容");
message.info("请输入用户名");
message.success("登录成功");

封装了四种样式 默认成功失败警告 

// 消息提示弹窗
const message = (function () {
  let zIndex = 999;
  let marginTop = "26rem";
  let lastMessage = null; // 存储上一个提示框元素

  const iconMap = {
    info: "https://phadwiki-1308066085.file.myqcloud.com/phadcalc/images/info.png",
    error:
      "https://phadwiki-1308066085.file.myqcloud.com/phadcalc/images/error.png",
    success:
      "https://phadwiki-1308066085.file.myqcloud.com/phadcalc/images/succee.png",
  };

  const styleMap = {
    none: { bgColor: "rgba(0, 0, 0, 0.6)", borderColor: "none", color: "#fff" },
    info: { bgColor: "#edf2fc", borderColor: "#ebeef5", color: "#909399" },
    error: { bgColor: "#fef0f0", borderColor: "#fde2e2", color: "#f56c6c" },
    success: { bgColor: "#f0f9eb", borderColor: "#e1f3d8", color: "#67c23a" },
  };

  function clearLastMessage() {
    if (lastMessage) {
      lastMessage.classList.add("message-out");
      setTimeout(() => {
        lastMessage.remove();
        lastMessage = null;
      }, 300);
    }
  }

  function createMessageElement(type, val) {
    const style = styleMap[type] || styleMap.none;
    const icon = iconMap[type] || "";

    const div = document.createElement("div");
    div.className = "message_list message-in";
    div.style.cssText = `
      z-index: ${zIndex++};
      position: fixed;
      left: 50%;
      transform: translateX(-50%);
      top: ${marginTop};
      background-color: ${style.bgColor};
      border: 1px solid ${style.borderColor};
      padding: 8px;
      border-radius: 4px;
      box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
      display: flex;
      align-items: center;
      pointer-events: auto;
      transition: opacity 0.3s ease, transform 0.3s ease;
    `;

    const img = document.createElement("img");
    img.src = icon;
    img.alt = type;
    img.style.cssText = `
      width: 16px;
      height: 16px;
      margin-right: 8px;
      display: ${icon ? "inline-block" : "none"};
    `;

    const span = document.createElement("span");
    span.textContent = val;
    span.style.cssText = `
      color: ${style.color};
      font-size: 14px;
    `;

    div.appendChild(img);
    div.appendChild(span);
    return div;
  }

  function showMessage(type, val, time = 1000) {
    clearLastMessage();

    const messageEl = createMessageElement(type, val);
    document.body.appendChild(messageEl);

    lastMessage = messageEl;

    setTimeout(() => {
      messageEl.classList.remove("message-in");
      messageEl.classList.add("message-out");
      setTimeout(() => {
        if (messageEl) {
          messageEl.remove();
          if (lastMessage === messageEl) {
            lastMessage = null;
          }
        }
      }, 300);
    }, time);

    return this;
  }

  return {
    none(val, time) {
      return showMessage.call(this, "none", val, time);
    },
    info(val, time) {
      return showMessage.call(this, "info", val, time);
    },
    error(val, time) {
      return showMessage.call(this, "error", val, time);
    },
    success(val, time) {
      return showMessage.call(this, "success", val, time);
    },
  };
})();


网站公告

今日签到

点亮在社区的每一天
去签到