【发布时间】:2017-05-03 20:06:28
【问题描述】:
我遇到了一个我没想到会发生的特殊问题。 Here is a codepen 的情况。是这样的:
我有一个隐藏的 div,它会在单击按钮时弹出,并在关闭后弹出“in”。这是通过 jQuery 显示/隐藏来处理的。对于 UX,我想通过 CSS 添加一个微妙的弹出动画。我添加了以下内容:
.popout { animation: popout .2s ease;}
.popin { animation: popin .2s ease;}
@keyframes popout {
from {transform:scale(0)}
90% {transform:scale(1.1)}
to {transform:scale(1)}
}
@keyframes popin {
from {transform:scale(1)}
10% {transform:scale(1.1)}
to {transform:scale(0)}
}
现在动画工作正常,但在关闭弹出窗口(添加 popin 类)后,它恢复到默认的 css 状态,这是可见的。所以结果是你看到弹出窗口缩小,然后再次出现并停留。
我可以通过在 CSS 动画调用中添加 forwards 来“修复”这个问题,但这会强制动画继续进行,而不管其他点击如何。换句话说;如果我将 forwards 添加到 CSS 动画中,它会保持隐藏状态,但在您再次打开它时不会显示(因为 forwards 仍然处于活动状态)。
我再次参考the Codepen,您可以在其中查看并亲自尝试。如果将forwards 添加到.popin 类中,关闭后它会保持隐藏状态,但无法再次打开。
所以我想知道我的思维过程哪里出错了;我们是否能够“覆盖”或“停止”forwards 设置?我错过了一些明显的东西吗?或者这不是这样做的方法,我应该研究一下 jQuery 动画吗?
【问题讨论】:
-
哇哦,这么简单啊。你所做的只是添加超时?我之前想过,但我认为如果动画滞后或长度发生变化,它可能会给隐藏它的固定超时带来问题。
-
点击关闭时忘记隐藏弹出窗口,必须添加
$('popup').hide(); -
你可以使用 jquery fadeIn 和 fadeOut 函数来实现。它更容易。例如:$("popup").fadeIn("slow")
-
@AlexTimmer 我认为这不会造成任何问题