在讲究用户体验的年代,如何高效的制作弹窗的动画效果
参考Vant组件库源码,借助Vue封装的transition
元素,可快速为之前存在的弹窗和底部浮层添加动画。
1. 底部浮层
下图是底部浮层的示意图。

下面是核心代码,vue文件用transition
包裹住你的组件:
| <transiton name="my-fade">
<YourComponent />
</transition>
|
假设你的组件下面的灰色背景层类名是tip-toc-operating-layer
,内部的内容类名是tip-toc-bottom-dialog
,下面是scss代码:
| .my-fade-enter,
.my-fade-leave-to {
.tip-toc-bottom-dialog {
transform: translate3d(0, 100%, 0);
}
&amp;.tip-toc-operating-layer {
background: rgba(0,0,0,0);
}
}
.my-fade-enter-to,
.my-fade-leave {
.tip-toc-bottom-dialog {
transform: translate3d(0, 0 0);
}
&amp;.tip-toc-operating-layer {
background: rgba(0,0,0,.7);
}
}
.my-fade-enter-active,
.my-fade-enter-active .tip-toc-bottom-dialog,
.my-fade-enter-active.tip-toc-operating-layer {
transition: all .3s ease-out;
}
.my-fade-leave-active ,
.my-fade-leave-active .tip-toc-bottom-dialog,
.my-fade-leave-active.tip-toc-operating-layer {
transition: all .3s ease-in;
}
|
值得注意的是,vant
组件库中的popup
组件已经实现了这个动画,可以直接使用,但是需要改造自己的组件。
2. 弹窗
下面是弹窗动画的示意图:

下面是vue代码:
| <transiton name="dialog-fade">
<YourDialog />
</transition>
|
假设你的组件下面的灰色背景层类名是tip-toc-dialog-wrap
,内部的内容类名是tip-toc-dialog
,下面是scss代码:
| // 背景层
.tip-toc-dialog-wrap {
transition: all .3s ease-in;
}
// 内容
.tip-toc-dialog {
transition: all .3s ease-in;
transform: translate3d(-50%, -50%, 0);
}
.dialog-fade-enter .tip-toc-dialog {
transform: translate3d(-50%, -50%, 0) scale(.7);
opacity: 0;
}
.dialog-fade-leave-active .tip-toc-dialog {
transform: translate3d(-50%, -50%, 0) scale(.9);
opacity: 0;
}
.dialog-fade-enter-active .tip-toc-dialog-wrap {
animation: dialog-fade-in .3s both ease-out;
}
.dialog-fade-leave-active .tip-toc-dialog-wrap {
animation: dialog-fade-out .3s both ease-in;
}
@keyframes dialog-fade-in {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes dialog-fade-out {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
|