我试着用css动画来解决,但遇到了这个问题。
我使用@keyframes
from 0px to size
进行了高度动画并且它正常工作,但是如果我想恢复动画from size to 0px
并将display: none
添加到父元素中不工作。那么显示触发器早于动画呢?
您是否有一些建议如何通过css解决任务?
代码
$('.toggle-nav').click(function (e) {
e.preventDefault();
$('nav').toggleClass('active');
});

.toggle-nav {
padding: 7px 12px;
text-decoration: none;
background: #fff;
}
nav li {
background: #fff;
color: #000;
animation: slide-down-list-revert .3s linear 0s;
}
nav {
display: none;
}
nav.active {
display: block;
}
nav.active li {
display: block;
animation: slide-down-list .3s linear 0s;
}
@keyframes slide-down-list {
from {
height: 0;
}
to {
height: 30px;
}
}
@keyframes slide-down-list-revert {
from {
height: 30px;
}
to {
height: 0;
}
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="toggle-nav" href="#">☰</a>
<nav>
<ul>
<li><a>Item 1</a></li>
<li><a>Item 2</a></li>
</ul>
</nav>
&#13;
答案 0 :(得分:1)
您只需要使用以下代码替换您的代码:
$('.toggle-nav').click(function (e) {
e.preventDefault();
$('nav').slideToggle();
});
然后删除您用于动画的其他CSS。
答案 1 :(得分:1)
按照您编写的方式,元素将在动画开始之前隐藏。如果您想恢复nav li
的可见状态,则首先需要完成动画,然后隐藏它。这可以通过向animationend
或nav
添加nav li
事件来完成,处理程序可以在animationend
被触发后立即隐藏它。
我为此重写了一些东西。请注意,我在您的CSS中添加了另一个名为revert
的CSS,它运行您的slide-down-list-revert
动画。
$('.toggle-nav').click(function (e) {
e.preventDefault();
var nav = $('nav');
if(!nav.hasClass('active')){
nav.toggleClass('active');
}
else{
nav.addClass('revert');
}
});
$('nav').on('animationend', function(){
if ($(this).hasClass('revert')){
$('nav').toggleClass('revert active');
}
});
.toggle-nav {
padding: 7px 12px;
text-decoration: none;
background: #fff;
}
nav li {
background: #fff;
color: #000;
animation: slide-down-list-revert .3s linear 0s;
}
nav {
display: none;
}
nav.active {
display: block;
}
nav.active li {
display: block;
animation: slide-down-list .3s linear 0s;
}
nav.revert li{
animation: slide-down-list-revert .3s linear 0s;
}
@keyframes slide-down-list {
from {
height: 0;
}
to {
height: 30px;
}
}
@keyframes slide-down-list-revert {
from {
height: 30px;
}
to {
height: 0;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="toggle-nav" href="#">☰</a>
<nav>
<ul>
<li><a>Item 1</a></li>
<li><a>Item 2</a></li>
</ul>
</nav>