代码编织梦想

逻辑: 利用 document.createElement 实时生成组件插入到 Html 中。

# 用类创建一个实例子。
创建 plugins.ts 文件,写入以下
/** message 消息提示 */
class Message {
    private title?: string | null | undefined;
    private icon?: string;
    private type: "error" | "warning" | "success" | "info";
    private message?: string;
    private duration: number;

    constructor () {
        // 默认值
        this.type = "info";
        this.duration = 3000;
    }

    private open () {
        /** 获取 Message Content */
        const MessageContentWrapper = this._element();
        /** 创建新 message card */
        const MessageElement = document.createElement("div");
        MessageElement.setAttribute("class", `message active`);
        MessageElement.innerHTML = `
            <div class="message-icon ${this.type}">
                <span class="fas ${this.icon}"></span>
            </div>
            <div class="message-content">
                <div class="message-title">${ this.title }</div>
                <div class="message-description">${ this.message }</div>
            </div>
        `
        /** 挂载 */
        MessageContentWrapper.appendChild(MessageElement);
        /** 移除 */
        setTimeout(() => {
            MessageContentWrapper.removeChild(MessageElement);
        }, this.duration);
    }

    public error (title: string, message: string, duration: number = 3000): void {
        this.icon = "fa-remove-circle";
        this.type = "error";
        this._set(title, message, duration)
        this.open()
    }

    public warning (title: string, message: string, duration: number = 3000): void {
        this.icon = "fa-exclamation-circle"
        this.type = "warning"
        this._set(title, message, duration)
        this.open()
    }

    public success (title: string, message: string, duration: number = 3000): void {
        this.icon = "fa-crosshairs"
        this.type = "success"
        this._set(title, message, duration)
        this.open()
    }

    public info (title: string, message: string, duration: number = 3000): void {
        this.icon = "fa-info-circle"
        this.type = "info"
        this._set(title, message, duration)
        this.open()
    }

    private _set (title: string, message: string, duration: number = 3000) {
        this.title = title;
        this.message = message;
        // 600ms 为动画时长;
        this.duration = duration;
    }

    private _element () {
        const Element = document.getElementById("message-content");
        if (Element) {
            return Element;
        }
        const MessageContentElement = document.createElement("div");
        MessageContentElement.setAttribute("id", "message-content");
        document.body.appendChild(MessageContentElement);
        return MessageContentElement
    }
}

export default {
    $message: new Message()
}

方法包含了情景式的交互,可以自行更改 icon,下面开始对组件进行美化

/*注意:这里使用了 css 预处理器*/
#message-content{
    max-width: 330px;
    width: calc(100vw - 50px);
    position: fixed;
    top: 20px;
    right: 20px;
    z-index: 9998;
    .message{
        width: 100%;
        padding: 15px;
        margin: 0 auto 10px;
        margin-right: -400px;
        transition: margin-right .6s ease;
        background: #ffffff;
        border: 1px solid #ebeef5;
        box-shadow: 0 2px 6px 0 rgba(0, 0, 0, .3);
        display: flex;
        justify-content: flex-start;
        border-radius: 8px;
        &.active{
            margin-right: auto;
            transition: margin-right .6s ease;
        }
        .message-icon{
            font-size: 30px;
            color: var(--black);
            padding-right: 6px;
            &.error{
                color: var(--red)
            }
            &.warning{
                color: var(--yellow)
            }
            &.success{
                color: var(--green)
            }
            &.info{
                color: var(--info)
            }
        }
        .message-content{
            width: calc(100% - 46px);
            .message-title{
                font-size: 16px;
                color: var(--black);
                font-weight: bold;
            }
            .message-description{
                overflow: hidden;
                white-space: normal;
                word-break: break-word;
                display: -webkit-box;
                -webkit-box-orient: vertical;
                -webkit-line-clamp: 2;
                font-size: 13px;
                color: #555666;
            }
        }
    }
}

页面中使用,引用文件

import plugins from './plugins';
plugins.$message.error("错误", "error message");
plugins.$message.success("成功", "success message");

效果
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_50368372/article/details/134687246

前端小技巧:用原生js写一个弹窗消息提醒插件_weixin_34392843的博客-爱代码爱编程

嗨,这里是芝麻,今天我们一块来做一个“弹窗消息提醒”插件。 喏,就是这么一个效果。 1. 分析 当消息被触发的时候,会有一个自上而下的淡入过程。在持续了一段时间后会自动的消失,或者是需要用户来手动的点击关闭按钮。在消息消失的时候,会有一个自下而上的淡出过程。消息是可以叠加弹出的,最新的消息会排在消息列表的最后面。当前面的消息

纯js消息弹窗组件Message-爱代码爱编程

js消息弹窗组件 文章目录 js消息弹窗组件1. js部分代码2.使用方法3.演示效果 写组件上瘾,今天写一个纯js消息弹窗组件,复制即可使用,css也写在了js之中,用js生成,代码若是存在不足的地方可以探讨一些,本人也是前端新人┭┮﹏┭┮ 1. js部分代码 (function(win) { const create

js MessageChannel通道传输-爱代码爱编程

window.MessageChannel也是浏览器提供的一个异步操作的API,属于宏任务 这个api会创建一个管道,管道的两端分别代表一个messagePort,都能够通过portMessage向对方发送数据,通过onmessage来接受对方发送过来的数据 基本使用 const ch = new MessageChannel() const port

JS:原生JS实现message消息提示框-爱代码爱编程

简介 学习了一下如何使用原生JS(加上class类)实现message消息提示框的封装(繁琐版)。 使用到的主要技术点:class类,JS。 功能点 1.四种提示状态(message success error warning)及文字显示; 2.不再提示(相同文字内容的消息)的功能按钮; 3.鼠标移入不消失,移出一秒后消失; 具体实现 1.新建一

js 简单的消息提示框-爱代码爱编程

简介:         有时候要在页面上显示消息,用alert(),体验不是很友好,每次要手动关闭,这里用js写一个 效果: 核心代码: /** * 显示消息 * @param {Object} rate */ function showMessage(msg) { const message = document.createEle

原生js扣一个this.$message-爱代码爱编程

//js封装一个消息提示,类似this.$message。 inner为提示的内容,state为消息状态(error,info,success) function message(inner, state) {     let message = document.createElement('div')     let messagep = do

jsmessage:轻量级的自定义通知库-爱代码爱编程

jsMessage:轻量级的自定义通知库 messageCustom messages, alerts, confirmations项目地址:https://gitcode.com/gh_mirrors/mess/mes

messenger.js: 极简的javascript消息传递库-爱代码爱编程

messenger.js: 极简的JavaScript消息传递库 是一个轻量级的JavaScript库,旨在简化网页应用中的消息传递功能。它提供了简单易用的API,可以轻松地在页面中添加各种类型的消息,如通知、提示、警告等

js封装的toast消息提示框,可作为消息提示、警示框、报错提示、确认框等,很方便好用_js toast-爱代码爱编程

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《20