jquery实现自定义消息提示组件

news/2024/7/10 23:13:57 标签: jquery, css, javascript

目录结构

message

  • icon
    • error.svg
    • warning.svg
    • success.svg
    • normal.svg
  • index.css
  • index.js
  • index.html

效果图

在这里插入图片描述

配置项

  • close:false,
  • actionFns:null,
  • message:‘’,
  • boxClass:‘’,
  • iconClass:‘’,
  • endClass:‘’,
  • textClass:‘’,
  • endHtml:‘’,
  • placement:‘top’
  • time:4000
  • parent:‘body’
  • 提供四种基础样式
    • 默认:default
    • 成功:success
    • 警告:warning
    • 失败:error

代码

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link href="./index.css" rel="stylesheet" type="text/css"  />
</head>
<body>
    
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script>
    <script src="./index.js"></script>
    <script>javascript">
        yhmessage('test',{
            close:true,
            placement:'center'
        })
        // yhmessage.error('error')
        // yhmessage.success('success')
        yhmessage.warning('warning')
    </script>
</body>

</html>

index.css

css">.yh-message{
    display: flex;
    justify-content: space-between;
    position: fixed;
    min-width: 640px;
    height: 40px;
    border: 1px solid;
    border-radius: 4px;
    align-items: center;
    padding: 12px 16px;
    box-sizing: border-box;
    left: 50%;
    transform: translateX(-50%);
    color: #262626;
}

.yh-message .messager-content{
    display: flex;
    align-items: center;
}

.yh-message.top{
    top: 24px;
}
.yh-message.bottom{
    bottom: 24px;
}

.yh-message.center{
    top: 50%;
    transform: translate(-50%,-50%);
}

.yh-message .close{
    cursor: pointer;
    color: #8C8C8C;
}

.yh-message .icon{
    margin-right: 8px;
    width: 16px;
    height: 16px;
    display: inline-block;
}

.yh-message .icon.normal{
    background: url(./icon/normal.svg) no-repeat;
}

.yh-message .message_close{
    width: 12px;
    height: 12px;
    display: inline-block;
    background: url(./icon/close.svg) no-repeat;
    cursor: pointer;
}

.yh-message .icon.warning{
    background: url(./icon/warning.svg) no-repeat;
}

.yh-message .icon.error{
    background: url(./icon/error.svg) no-repeat;
}

.yh-message .icon.success{
    background: url(./icon/success.svg) no-repeat;
}

.yh-message.yh-message-default{
    border-color: #00C2CE;
    background-color: rgba(0, 194, 206, 0.1);
}

.yh-message.yh-message-success{
    border-color: #0EC885;
    background-color: rgba(14, 200, 133, 0.1);
}

.yh-message.yh-message-warning{
    border-color: #FAAD10;
    background-color: rgba(250, 173, 16, 0.1);
}

.yh-message.yh-message-error{
    border-color: #EF5615;
    background-color: rgba(239, 86, 21, 0.1);
}

index.js


(function(){
    var id = 0;
    var all = {};
    var DEFAULTS = {
        type:'default',
        close:false,
        actionFns:null,                     
        message:'',   
        boxClass:'',    
        iconClass:'normal',
        endClass:'',      
        textClass:'',               
        endHtml:'',                                     
        placement:'top',
        time:1000,
        parent:'body' ,
    };
    var template = '<div class="yh-message yh-message-{type} {placement}"><div class="messager-content"></div><div class="messager-actions"></div></div>'
    
    var Messager = function(message,options){
        // 如果传进来的是对象则兼容直接为配置项
        if($.isPlainObject(message)) {
            options = message;
            message = options.message;
        }
        var that = this;
        options = that.options = $.extend({},DEFAULTS, options);
        that.id = options.id || (id++);
        // 如果存在相同id,则需要销魂原来的
        var oldMessager = all[that.id];
        if(oldMessager) oldMessager.destroy();
        that.message =  (options.iconClass ? '<span class="icon '+ options.iconClass +'"></span>':'') + (options.textClass ? '<span class="'+ options.textClass +'">'+ message +'</span>':'<span>' + message + '</span>')  ;
        console.log(that.message);
        // 创建元素
        that.$ = $(template.replace('{type}',options.type).replace('{placement}',options.placement)).attr('id',"yh-messager"+that.id);
        that.$.find('.messager-content').append($(that.message));
        // 添加外层盒子类名
        if(options.boxClass) that.$.addClass(options.boxClass);
        // 当前消息框的事件
        var $actions = that.$.find('.messager-actions');
        // 处理删除
        if(options.close){
            options.endHtml = "<span class='message_close'></span>"
            options.actionFns = function(e){
                that.destroy()
            }
        }
        if(options.endHtml){
            var end = $(options.endHtml);
            // 绑定事件
            end.on('click',function(e){
                if($.isFunction(options.actionFns)){
                    options.actionFns.call(this,that)
                }
                e.stopPropagation()
            })
            $actions.append(end)
        }
        // 添加到父级
        $(options.parent).append(that.$);
        all[that.id] = that;
        if(!options.close){
            setTimeout(() => {
                that.destroy()
            }, options.time);
        }
        return that
    }

    // 销毁原来的提示框
    Messager.prototype.destroy = function() {
        var that = this;
        that.$.hide();
        that.$.remove();
        that.$ = null;
        delete all[that.id];
    };

    function init(message,options){
        var msg = (options && options.id && all[options.id]) || new Messager(message, options)
        return msg;
    }

    function initSuccess(message,options){
        options = $.extend({},options,{type:'success' , iconClass:'success'})
        var msg = (options && options.id && all[options.id]) || new Messager(message, options)
        return msg;
    }

    function initWarning(message,options){
        options = $.extend({},options,{type:'warning' , iconClass:'warning'})
        var msg = (options && options.id && all[options.id]) || new Messager(message, options)
        return msg;
    }

    function initError(message,options){
        options = $.extend({},options,{type:'error' , iconClass:'error'})
        var msg = (options && options.id && all[options.id]) || new Messager(message, options)
        return msg;
    }

    $.yhmessage = window.yhmessage = init
    $.yhmessage.success = window.yhmessage.success = initSuccess
    $.yhmessage.warning = window.yhmessage.warning = initWarning
    $.yhmessage.error = window.yhmessage.error = initError

})()

http://www.niftyadmin.cn/n/156771.html

相关文章

c++高性能:多进程 cuda编程

GPU(Device)用于异构计算&#xff0c;CPU(Host)控制GPU。极简入门。API(CUDA Driver APICUDA Runtime APICUDA Libraries) hello world // main.cu #include <iostream> #include <stdio.h>void cpu_hello(){printf("cpu\n"); } __global__ void cuda_…

【springboot】拦截器

6、拦截器 1、HandlerInterceptor 接口 /*** 登录检查* 1、配置好拦截器要拦截哪些请求* 2、把这些配置放在容器中*/ Slf4j public class LoginInterceptor implements HandlerInterceptor {/*** 目标方法执行之前* param request* param response* param handler* return* t…

ChatGPT技术原理解析:从RL之PPO算法、RLHF到GPT4、instructGPT

写在最前面&#xff0c;23年2.27日起&#xff0c;我个人和十来位博士朋友精读100篇ChatGPT相关技术的论文(每天一篇&#xff0c;100天读完100篇&#xff0c;这100篇的论文清单见此文)&#xff0c;过程中几乎每天都会不断优化本文&#xff0c;优化记录见本文文末的“后记”中.. …

Open3D 点云与模型ICP配准(Python,详细步骤版本二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这是一个很有趣的功能,在真正进入主题之前,让我们先回顾一下点云与点云ICP算法的过程,如下图所示: (1)挑选发生重叠的点云子集,这一步如果原始点云数据量比较巨大,一般会对原始点云进行下采样操作。 (2)匹…

unordered_set和unordered_map的使用和哈希表的实现

文章目录1. unordered系列关联式容器1.1 unordered_set1.2 unordered_set的使用1.3 unordered_set和set的区别1.4 unordered_map2. 底层结构2.1 哈希概念2.2 哈希冲突2.3 哈希冲突解决2.4.1 闭散列2.4.2 代码实现闭散列2.4.3 插入函数实现2.4.4 查找和删除函数实现2.4.5 二次探…

redis教程3 (特性以及五种数据类型的编码特点适用场景)

redis 特性以及五种数据类型的编码特点适用场景redis特性优势&#xff08;快&#xff09;string类型的编码及适用场景hash 的编码及适用的类型list的编码及适用场景集合set的内部编码及使用场景有序集合zset的编码及适用场景redis特性优势&#xff08;快&#xff09; 纯内存访…

探密Power Apps

目录什么是 Power Apps为什么使用 Dataverse&#xff1f;将数据集成到 Dataverse 中30 天免费探索 Power Apps我可以使用哪个电子邮件地址获得许可证&#xff1f;开始使用 Power Apps左侧导航窗格支持使用 Power Apps 移动应用运行应用的平台支持运行 Power Apps 的浏览器运行 …

乒乓智能科技二面经历

redis 可重入锁了解吗&#xff1f; 1 可重入锁的需求 单纯的 Redis 分布式锁仍然有些场景不满⾜的&#xff0c;如⼀个⽅法获取到锁后&#xff0c;可能在⽅法内继续调这个⽅法&#xff0c;就获取不到锁了。这时就要把锁改进成可重⼊锁。 重⼊锁&#xff0c;是以线程为单位&am…