嗨,这里是芝麻,今天我们一块来做一个“弹窗消息提醒”插件。
喏,就是这么一个效果。
1. 分析
-
当消息被触发的时候,会有一个
自上而下
的
淡入
过程。 -
在持续了一段时间后会
自动的消失
,或者是需要用户来手动的
点击关闭按钮
。 -
在消息消失的时候,会有一个
自下而上
的
淡出
过程。 -
消息是可以
叠加
弹出的,最新的消息会排在消息列表的
最后面
。 -
当前面的消息消失后,后面的消息会有一个
向上滑动
效果。
然后消息本身是有三部分组成
- 消息图标,用来区分不同类型的消息。
- 消息文本。
- 关闭按钮,并不是所有消息都需要关闭按钮。
2. 实现样式
那么,不管我们是用原生js还是vue,首先呢,我们都需要把这个消息的基本样式给写出来,然后再通过js来控制消息的弹出和关闭。 所以,我们先来写html和css。
<!-- message.html -->
<!-- 这个css是我引用阿里的一些字体图标,请戳: https://www.iconfont.cn/ -->
<link rel="stylesheet" href="http://at.alicdn.com/t/font_1117508_wxidm5ry7od.css">
<link rel="stylesheet" href="./message.css">
<script src="./message.js"></script>
<!-- 消息外层容器,因为消息提醒基本上是全局的,所以这里用id,所有的弹出消息都是需要插入到这个容器里边的 -->
<div id="message-container">
<div class="message">
<!-- 消息图标 icon icon-success对应我的阿里字体图标的font-class -->
<div class="type icon icon-success"></div>
<!-- 消息文本 -->
<div class="text">这是一条正经的消息~</div>
<!-- 关闭按钮 -->
<div class="close icon icon-close"></div>
</div>
<div class="message">
<div class="type icon icon-error"></div>
<div class="text">这是一条正经的消息~</div>
</div>
</div>
复制代码
/* message.css */
#message-container {
position: fixed;
left: 0;
top: 0;
right: 0;
/* 采用flex弹性布局,让容器内部的所有消息可以水平居中,还能任意的调整宽度 */
display: flex;
flex-direction: column;
align-items: center;
}
#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-container .message .text {
color: #333;
padding: 0 20px 0 5px;
}
#message-container .message .close {
cursor: pointer;
color: #999;
}
/* 给每个图标都加上不同的颜色,用来区分不同类型的消息 */
#message-container .message .icon-info {
color: #0482f8;
}
#message-container .message .icon-error {
color: #f83504;
}
#message-container .message .icon-success {
color: #06a35a;
}
#message-container .message .icon-warning {
color: #ceca07;
}
#message-container .message .icon-loading {
color: #0482f8;
}
复制代码