<分区>
<分区>
我需要为一组嵌套的 div 中的元素子集设置收缩和展开过渡动画。展开工作正常,但收缩坏了。
我有一个结构化的元素集合(例如,此处的正方形),我想有选择地显示这些元素并且我想为其设置动画。
结构是:collection > groups > rows > squares
在静态布局中,
正方形可以有不同的大小,所以容器必须相应地调整 (没有固定的高度或宽度)。
我已经获得了我想要的静态布局。
问题来自于动画。我想隐藏各种子集 正方形、行和/或组。附近的元素看起来很相似,所以它是 用户很难分辨添加或减去的内容,因此 我需要一个流畅的动画,以便用户可以了解正在发生的变化。
我正在尝试使用 CSS 动画收缩来做到这一点:
shrinkMe
类标记了我想要的所有元素
此刻收缩/展开shrinkMe
元素shrunken
类,其 CSS 具有其所有
大小参数设置为 0shrunken
类标记添加到 $('shrinkMe')
元素中,以制作动画
介于完整尺寸和缩小尺寸 (=0) 之间的元素不收缩的动画过渡正是我想要的。但是收缩动画根本不起作用 - 内容物沿途从容器中溢出。
shrink = function(bool,nsec) {
$('.shrinkMe').css("transition", 'all ' + nsec+ 's');
if (bool) $('.shrinkMe').addClass('shrunk')
else $('.shrinkMe').removeClass('shrunk');
}
anim = function(secs) {
return 'all ' + secs + 's'
}
.controls {
display: inline-block;
vertical-align: top;
}
.collection {
display: inline;
text-align: center;
border: 2px solid black;
padding: 3px;
display: inline-block;
}
.group {
display: block;
margin: 2px;
border: 2px solid black;
padding: 3px;
}
.row {
display: block;
vertical-align: middle;
background: #0cc;
margin: 1px;
border: 2px solid black;
}
.sq {
display: inline-block;
background: white;
width: 20px;
height: 20px;
margin: 5px;
border: 2px solid black;
}
.lg {
width: 25px;
height: 25px;
}
.shrinkMe {
border-color: red;
}
.shrunk {
height: 0px;
width: 0px;
border-width: 0px;
padding: 0px;
margin: 0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<div class='controls'>
<button type='button' onclick='shrink(true,2)'>shrink reds </button>
<br>
<button type='button' onclick='shrink(false,2)'>unshrink reds </button>
</div>
<div class='collection'>
<div class='group'>
<div class='row '>
<div class='sq'></div>
<div class='sq'></div>
</div>
<div class='row shrinkMe'>
<div class='sq lg shrinkMe'></div>
<div class='sq shrinkMe'></div>
<div class='sq lg shrinkMe'></div>
</div>
</div>
<div class='group shrinkMe' id='group2'>
<div class='row shrinkMe' id='group2container2'>
<div class='sq shrinkMe'></div>
<div class='sq shrinkMe'></div>
</div>
<div class='row shrinkMe'>
<div class='sq shrinkMe'></div>
<div class='sq lg shrinkMe'></div>
<div class='sq shrinkMe'></div>
</div>
</div>
</div>
除其他事项外,我曾尝试使用不同的显式转换速度,因此容器的收缩速度比其内容的收缩速度慢,但无济于事。如果我设置行和组的显式高度和宽度,我可以获得协调的嵌套收缩,但它很难看:
我想要实现的很简单:一个收缩动画,它是漂亮干净的取消收缩的时间反转。
这里还有一个jsfiddle显示的问题是,另外还有用于尝试单独计时更深层嵌套 div 的按钮(其中 没有帮助...)
https://jsfiddle.net/furnas/dgq8yusy/
对错误的任何解释以及如何修复的建议 是吗?
最佳答案
使用 jquery anymation onComplete 事件为 div 添加和删除类。
因为你的 css 转换就像另一个线程上的异步方法一样工作,所以,你需要等待它完成而不是添加/删除类。
关于javascript - 在javascript中为一组嵌套的div中的元素子集设置动画收缩和扩展过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44608273/