利用es6和es5的继承方式写一个简单的弹窗

article/2025/6/28 6:33:14

本片博文受到https://blog.csdn.net/zfzhuman123/article/details/90411793的启发,es6部分代码只改了一点点,逻辑也是遵照他的思想来的,而且es5继承的部分也是用了部分es6的语法

 

1.首先是index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><link rel="stylesheet" href="http://at.alicdn.com/t/font_1117508_wxidm5ry7od.css"><style>/* message.css *//* 这个动画规则我们就叫做message-move-in吧,随后我们会用animation属性在某个元素上应用这个动画规则。 */@keyframes message-move-in {0% {/* 前边分析过了,弹出动画是一个自上而下的淡入过程 *//* 所以在动画初始状态要把元素的不透明度设置为0,在动画结束的时候再把不透明度设置1,这样就会实现一个淡入动画 */opacity: 0;/* 那么“自上而下”这个动画可以用“transform”变换属性结合他的“translateY”上下平移函数来完成 *//* translateY(-100%)表示动画初始状态,元素在实际位置上面“自身一个高度”的位置。 */transform: translateY(-100%);}100% {opacity: 1;/* 平移到自身位置 */transform: translateY(0);}}/* message.css */@keyframes message-move-out {0% {opacity: 1;transform: translateY(0);}100% {opacity: 0;transform: translateY(-100%);}}/* message.css */#message-container .message.move-in,  #container .message.move-in {/* animation属性是用来加载某个动画规则 请参考 https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation */animation: message-move-in 0.3s ease-in-out;/*ease-in-out	规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))(相对于匀速,(开始和结束都慢)两头慢)。*/}#message-container .message.move-out, #container .message.move-out {animation: message-move-out 0.3s ease-in-out;/* 让动画结束后保持结束状态 */animation-fill-mode: forwards;}/* message.css */#message-container, #container {position: absolute;left: 0;top: 0;right: 0;bottom: 0;background: #eee;/* 采用flex弹性布局,让容器内部的所有消息可以水平居中,还能任意的调整宽度 */display: flex;flex-direction: column;justify-content: center;align-items: center;}#message-container .message, #container .message {background: #fff;margin: 10px 0;padding: 0 10px;height: 40px;box-shadow: 0 0 10px 0 #eee;font-size: 14px;border-radius: 3px;/* 让消息内部的三个元素(图标、文本、关闭按钮)可以垂直水平居中 */display: flex;align-items: center;}/* 给每个图标都加上不同的颜色,用来区分不同类型的消息 */.message .icon-info {color: #0482f8;}.message .icon-error {color: #f83504;}.message .icon-success {color: #06a35a;}.message .icon-warning {color: #ceca07;}.message .icon-loading {color: #0482f8;} .btn {position: absolute;top: 10px;left: 10px;z-index: 100;}</style>
</head>
<body><button class="btn">弹窗消息提醒</button>
</body>
<script src="index.js"></script>
<script>
// message可以定义为全局对象,项目中可以直接调用。
const message = new Message({containerId: 'container'});
document.querySelector('.btn').addEventListener('click', () => {message.show({type: 'error',text: '点我旁边的叉叉试试',duration: 1000,    // 不会自动消失closeable: true, // 可手动关闭});
});
</script>
</html>

2.es6部分

class Message {//构造函数会在实例化的时候自动执行constructor(opts={}) {const containerId = opts.containerId || 'message-container';// 检测下html中是否已经有这个message-container元素this.containerEl = document.getElementById(containerId);//没有就创建一个if (!this.containerEl) {// 创建一个Element对象,也就是创建一个id为message-container的dom节点this.containerEl = document.createElement('div');this.containerEl.id = containerId;// 把message-container元素放在html的body末尾document.body.appendChild(this.containerEl);}}show({ type = 'success', text = '', duration = 2000, closeable = false }) {// 创建一个Element对象let messageEl = document.createElement('div');// 设置消息class,这里加上move-in可以直接看到弹出效果messageEl.className = 'message move-in';// 消息内部html字符串messageEl.innerHTML = `<span class="icon icon-${type}"></span><div class="text">${text}</div>`;//点击弹窗提醒按钮,不能多次出现弹窗if(document.getElementsByClassName(messageEl.className).length>0) {alert('弹窗已存在');return;}// 是否展示关闭按钮if (closeable) {// 创建一个关闭按钮let closeEl = document.createElement('div');closeEl.className = 'close icon icon-close';// 把关闭按钮追加到message元素末尾messageEl.appendChild(closeEl);// 监听关闭按钮的click事件,触发后将调用我们的close方法// 我们把刚才写的移除消息封装为一个close方法closeEl.addEventListener('click', (e) => {this.close(messageEl)});}// 追加到message-container末尾// this.containerEl属性是我们在构造函数中创建的message-container容器this.containerEl.appendChild(messageEl);// 只有当duration大于0的时候才设置定时器,这样我们的消息就会一直显示if (duration > 0) {// 用setTimeout来做一个定时器setTimeout(() => {//this.close(messageEl);}, duration);}   }/*** 关闭某个消息* 由于定时器里边要移除消息,然后用户手动关闭事件也要移除消息,所以我们直接把移除消息提取出来封装成一个方法* @param {Element} messageEl */close(messageEl) {// 首先把move-in这个弹出动画类给移除掉,要不然会有问题,可以自己测试下messageEl.className = messageEl.className.replace('move-in', '');// 增加一个move-out类messageEl.className += 'move-out';// 这个地方是监听动画结束事件,在动画结束后把消息从dom树中移除。// 如果你是在增加move-out后直接调用messageEl.remove,那么你不会看到任何动画效果messageEl.addEventListener('animationend', () => {// Element对象内部有一个remove方法,调用之后可以将该元素从dom树种移除!messageEl.remove();});}
}

3.es5方法

function Message(opts) {var defaultOpts = {containerId: opts.containerId||'message-container'};const containerId = defaultOpts.containerId;// 检测下html中是否已经有这个message-container元素this.containerEl = document.getElementById(containerId);//没有就创建一个if (!this.containerEl) {// 创建一个Element对象,也就是创建一个id为message-container的dom节点this.containerEl = document.createElement('div');this.containerEl.id = containerId;// 把message-container元素放在html的body末尾document.body.appendChild(this.containerEl);}
}//弹窗出现
Message.prototype.show = function(opts) {//es6的语法--解构赋值var defaultOpts = {type: opts.type||'success',text: opts.text||'点我旁边的叉叉试试',duration: opts.duration||2000,    // 不会自动消失closeable: opts.closeable||true, // 可手动关闭}let {type,text,duration,closeable} = defaultOpts;// 创建一个Element对象let messageEl = document.createElement('div');// 设置消息class,这里加上move-in可以直接看到弹出效果messageEl.className = 'message move-in';// 消息内部html字符串messageEl.innerHTML = `<span class="icon icon-${type}"></span><div class="text">${text}</div>`;//点击弹窗提醒按钮,不能多次出现弹窗if(document.getElementsByClassName(messageEl.className).length>0) {alert('弹窗已存在');return;}// 是否展示关闭按钮if (closeable) {// 创建一个关闭按钮let closeEl = document.createElement('div');closeEl.className = 'close icon icon-close';// 把关闭按钮追加到message元素末尾messageEl.appendChild(closeEl);// 监听关闭按钮的click事件,触发后将调用我们的close方法// 我们把刚才写的移除消息封装为一个close方法closeEl.addEventListener('click', (e) => {this.close(messageEl)});}// 追加到message-container末尾// this.containerEl属性是我们在构造函数中创建的message-container容器this.containerEl.appendChild(messageEl);// 只有当duration大于0的时候才设置定时器,这样我们的消息就会一直显示if (duration > 0) {// 用setTimeout来做一个定时器setTimeout(() => {//this.close(messageEl);}, duration);}   
}//弹窗消失
Message.prototype.close = function(messageEl) {// 首先把move-in这个弹出动画类给移除掉,要不然会有问题,可以自己测试下messageEl.className = messageEl.className.replace('move-in', '');// 增加一个move-out类messageEl.className += 'move-out';// 这个地方是监听动画结束事件,在动画结束后把消息从dom树中移除。// 如果你是在增加move-out后直接调用messageEl.remove,那么你不会看到任何动画效果messageEl.addEventListener('animationend', () => {// Element对象内部有一个remove方法,调用之后可以将该元素从dom树种移除!messageEl.remove();});
}

然后各自将es6或者es5这部分js在index.html中使用script标签引入,点击按钮查看效果就行了


http://chatgpt.dhexx.cn/article/C6IxQVCi.shtml

相关文章

Flex 布局教程:语法篇

阮一峰的网络日志 首页 档案 上一篇&#xff1a;ES6 的功能侦测库 下一篇&#xff1a;Flex 布局教程&#xff1a;实 分类&#xff1a; 开发者手册 Flex 布局教程&#xff1a;语法篇 作者&#xff1a; 阮一峰 日期&#xff1a; 2015年7月10日 网页布局&#xff08;layout&am…

Python全栈:ES6标准入门和Flex入门

文章目录 1 ES6标准入门2 开发环境搭建3 ES6与 JavaScript的关系4 ES6 变量与常量4.1 变量4.2 常量 5 ES6 解构赋值6 ES6 函数、箭头函数箭头函数理解this 7 JavaScript中的面向对象编程构造函数静态方法 8 ES6中的继承9 ES6中的模块化export的使用&#xff1a;import的使用在N…

ES6语法笔记

1.多行字符串 用反引号 表示&#xff1a; abc相当于 abc 2.字符串连接时使用变量 使用${变量名}直接引用字符串变量 var name 小明; var age 20; var message 你好, ${name}, 你今年${age}岁了!; alert(message); 3.字符串方法&#xff1a;不会改变原有字符串的内容&a…

mt4交易平台哪个好?不妨试试福瑞斯外汇平台

对于从事外汇交易的人来说&#xff0c;肯定对MT4不会陌生&#xff0c;众所周知&#xff0c;MT4是全球外汇交易中&#xff0c;最被广泛应用于零售客户市场的交易软件。界面简洁&#xff0c;容易上手等都是MT4潜在的优势&#xff0c;新手上路还得看MT4的指导。不过外汇交易中&…

AJPFX告诉你MT4平台有什么优势?

FX TERMINAL&#xff08;Meta Trader4&#xff09;交易平台功能 成功驾驭金融市场的第一步是拥有正确的工具。AJPFX为客户提供二十四小时的在线交易服务&#xff0c;MT4交易软件是目前全世界上最为先进&#xff0c;应用最为广泛的交易系统。客户的所要了解的行情报价&#xff0…

MT4行情交易API接口开发手记

之前开发的外汇量化交易系统&#xff0c;行情和交易接口都是通过在MT4平台下编写EA来实现&#xff0c;具体方法是&#xff1a;1、用C编写一个动态库文件&#xff0c;在里面实现行情和交易数据调用接口&#xff0c;将报价数据和K线数据写入数据库中&#xff0c;并从数据库中获取…

中期国际:MT4数据挖掘与分析方法:以数据为导向,制定有效的交易策略

在金融市场中&#xff0c;制定有效的交易策略是成功交易的关键。而要制定一份可靠的交易策略&#xff0c;数据挖掘与分析方法是不可或缺的工具。本文将介绍如何以数据为导向&#xff0c;利用MT4进行数据挖掘与分析&#xff0c;从而制定有效的交易策略。 首先&#xff0c;我们需…

双线macd指标参数最佳设置_手机mt4平台怎么使用macd双线指标

macd双线指标在外汇操作中具有重要作用&#xff0c;它既可用于电脑版的mt4&#xff0c;亦可用于手机mt4。那么&#xff0c;您对手机mt4macd双线指标了解多少&#xff1f;您知道它该如何添加、怎么使用吗&#xff1f;下文将为大家进行详细介绍。 手机mt4macd双线指标添加 手机mt…

MT4 API 跟单交易接口更新

1、MT4 API交易接口是什么&#xff1f; Api接口是跨平台多账号交易接口&#xff0c;是将MT4交易通道以API的方式聚合在一起&#xff0c;帮助开发商在各经纪商不提供manager后台账号、无须EA插件的情况下&#xff0c;也能轻松接入不同的MT4交易平台&#xff0c;完成登录、交易和…

MT4跟单软件更新至v4.23.0——HOOKSWORK多帐户跨平台

2022年12月7日更新内容&#xff1a; 1、新增“软件启动开始跟单” 当重启电脑或软件时&#xff0c;软件启动时&#xff0c;软件可自动启动开始按钮。 1&#xff09;重启服务器后自动登录系统命令&#xff1a;开始-运行- control userpasswords2 regedit>计算机\HKEY_LOCAL…

外汇交易MT4是什么软件?MT4与MT5有何区别?下载MT4要注意什么?

MT4是什么&#xff1f; MT4的全称是MetaTrader 4&#xff1b;是俄罗斯的迈达克公司发布的专门用于外汇交易的交易平台。MT4的特点是功能强大图表清晰使用简单&#xff1b;几乎可以加载市面上所有可用的金融市场技术分析指标&#xff1b;且自带mql语言功能&#xff1b;投资者甚至…

Hookswork多帐户跨平台MT4跟单软件的十二大优势:

Hookswork多帐户跨平台MT4跟单软件的十二大优势&#xff1a; 1、毫秒级跟单延迟 2、支持全球所有经纪商的 MT4 交易软件 3、不需要经纪商开放任何权限&#xff0c;不需要 EA 插件 4、不需要打开 MT4 终端 5、无绑定喊单及跟单账号数量限制 6、喊单账号也可以是观摩账号&#x…

中期国际:MT4交易平台介绍:功能、优势与适用范围

在外汇市场中&#xff0c;MetaTrader 4(简称MT4)被广泛认可为最受欢迎的交易平台之一。它具备丰富的功能和独特的优势&#xff0c;不仅适用于个人零售交易者&#xff0c;也广泛应用于金融机构和专业交易员。本文将介绍MT4交易平台的关键功能、独有优势以及适用范围。 首先&…

mt4系统平台的服务器,mt4平台服务器地址

mt4平台服务器地址 内容精选 换一换 Linux操作系统XEN实例变更为KVM实例前&#xff0c;必须已完成必要的驱动安装和配置。当您需要变更的Linux操作系统的XEN实例比较多时候&#xff0c;推荐您使用本节的批量自动配置的方法安装驱动&#xff0c;通过自动化脚本的方式批量为Linux…

vue项目中使用阿里icon库

从阿里字体图标库新建一个项目&#xff08;当然也可选择其他icon库&#xff09; 注意:Font class前缀不要和elment-ui中的图标前缀一样 2.选择需要的图标添加至项目&#xff0c;并生成Font class,下载至本地。 3.选择解压后的文件中的iconfont.css , iconfont.eot , iconfont.…

网站的icon图标与阿里云图标库的使用

文章目录 一、网站icon图标1.使用icon图标2.制作icon图标3.注意 二、图标库的引入1.进入阿里云图标库主页2.选择一种登录方式并登录2.搜索图标并加入购物车添加至项目下载素材 三、压缩图片 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、网站icon…

阿里巴巴图标库的使用

阿里巴巴图标库两种使用方式 阿里巴巴图标库网站&#xff1a;http://www.iconfont.cn/ 【一 】、下载到本地引入使用 【二】、http形式使用 一、 下载到本地引入使用 1、进入网站搜索需要的图标 2、找到自己需要的图标加入购物车 3、点击购物车图标&#xff0c;添加到项目&am…

【解决】阿里巴巴icon图标无法修改颜色

解决方式很简单&#xff0c;把彩色图标的勾去掉就可以了&#xff0c;如下 只要这个彩色图标不选就要可以&#xff0c;如果一定要选建议css文件分开存放就可以实现既有彩色又有可以修改颜色的字体图标的效果。

Vant组件库 引入 阿里矢量图 添加自己喜欢的 ICON

&#x1f4c3;目录跳转 一.矢量图下载&#x1f4a8;使用CDN方式&#x1f389;下载本地&#xff08;推荐&#xff09; 二.Vant引入Icon&#x1f5fa;️&#x1f383; 使用方式&#x1f680; 运行效果&#xff1a; 一.矢量图下载 &#x1f4a8;使用CDN方式 当然你也可以使用官方…

关于阿里云图标的使用 iconfont

iconfont 关于阿里云图标库使用的介绍 对于添加到网页中的iconfont可使用以下几种方式&#xff1a; 首先需要进入阿里云图标库官网进行对应的下载iconfont-阿里巴巴矢量图标库 将需要的图标加入到购物车 再添加至项目通过项目中进行下载 打开所下载的压缩包会有如下目录 全…