我希望模态使用它们出现时的动画的反向来隐藏。
到目前为止,我想出的策略是使用“反向”对应项创建CSS规则:
.modal-animate-zoom {
animation: animatezoom 0.77s;
}
.modal-animate-zoom-reverse {
animation: animatezoom-reverse 0.77s;
}
@keyframes animatezoom {
from {transform: scale(0)}
to {transform: scale(1)}
}
@keyframes animatezoom-reverse {
from {transform: scale(1)}
to {transform: scale(0)}
}
当我想隐藏模式时,在JavaScript中做类似的事情:
modal.classList.remove('modal-animate-popup')
modal.classList.add('modal-animate-popup-reverse')
// modalsList is the children of parent container
setTimeout(_ => { modalsList.removeChild(modal); }, 770)
这有效。我遇到的问题是:
我正在考虑以下两种选择:
任何人都可以推荐任何一种方法或替代解决方案吗?
答案 0 :(得分:1)
您可以删除animatezoom-reverse
动画,并根据包含的反向类来更改animation-direction
。请注意,forwards
和reverse
做两件事完全不同。
目标将保留由最后一个关键帧设置的计算值 在执行过程中遇到。
动画步骤向后执行,定时功能也向后执行 反转。
.modal-animate-zoom {
animation: animatezoom 0.77s forwards;
}
.modal-animate-zoom-reverse {
animation: animatezoom 0.77s reverse forwards;
}
@keyframes animatezoom {
from {transform: scale(0);}
to {transform: scale(1);}
}
.box {
width: 100px;
height: 100px;
background-color: green;
}
<div class="box modal-animate-zoom">box</div>
<div class="box modal-animate-zoom-reverse">box</div>
上述内容的改进版本,重复次数较少:
.modal-animate-zoom {
animation: animatezoom 0.77s forwards;
}
.reverse-animation {
animation-direction: reverse;
}
@keyframes animatezoom {
from {transform: scale(0);}
to {transform: scale(1);}
}
.box {
width: 100px;
height: 100px;
background-color: green;
}
<div class="box modal-animate-zoom">box</div>
<div class="box modal-animate-zoom reverse-animation">box</div>