This question already has answers here:
How can I transition height: 0; to height: auto; using CSS?
(47个答案)
2年前关闭。
我需要为嵌套div集中的元素子集的收缩和展开过渡设置动画。扩展效果很好,但收缩效果却不佳。
我有一个项目的结构化集合(例如,此处为目的的正方形),我想选择性地显示这些项目,并为其设置动画效果。
结构为:集合>组>行>正方形
在静态布局中,
正方形出现在水平行中;
行是垂直分组的;
一列群组构成集合。
正方形的大小可以变化,因此容器必须相应调整
(没有固定的高度或宽度)。
我已经获得了我想要的静态布局。
问题来自动画。我想隐藏各种子集
正方形,行和/或组。附近的物品看起来类似
用户很难分辨出要添加或减去的内容,因此
我需要一个平滑的动画,以便用户可以跟随变化。
我正在尝试使用CSS动画缩小功能来执行此操作:
此刻缩小/扩展
为此设置了CSS转换时间
定义了一个
尺寸参数设置为0
为了缩小或扩展,jQuery添加或删除了
完整尺寸和缩小尺寸(= 0)之间的项目
缩小的动画过渡正是我想要的。但是收缩动画根本不起作用-内容从容器中溢出。
除其他外,我尝试使用不同的显式过渡速度,因此容器收缩的速度比其内容收缩慢,但无济于事。如果我为行和组设置了显式的高度和宽度,则可以得到协调的嵌套收缩,但这很丑陋:
它通过向左侧挤压而收缩,并且;
最终布局中可以包含空白空间(例如,当一行在未收缩的组内缩小时,固定的显式组容器高度意味着该行所在的位置现在有一个洞)。
我想要实现的是简单的:收缩动画,这是很好的干净非收缩的时间反转。
这也是显示问题的jsfiddle,该按钮还具有用于尝试对更深层嵌套的div进行单独计时的按钮(
无济于事...)
https://jsfiddle.net/furnas/dgq8yusy/
关于出问题的任何解释以及如何修复的建议
它?
(47个答案)
2年前关闭。
我需要为嵌套div集中的元素子集的收缩和展开过渡设置动画。扩展效果很好,但收缩效果却不佳。
我有一个项目的结构化集合(例如,此处为目的的正方形),我想选择性地显示这些项目,并为其设置动画效果。
结构为:集合>组>行>正方形
在静态布局中,
正方形出现在水平行中;
行是垂直分组的;
一列群组构成集合。
正方形的大小可以变化,因此容器必须相应调整
(没有固定的高度或宽度)。
我已经获得了我想要的静态布局。
问题来自动画。我想隐藏各种子集
正方形,行和/或组。附近的物品看起来类似
用户很难分辨出要添加或减去的内容,因此
我需要一个平滑的动画,以便用户可以跟随变化。
我正在尝试使用CSS动画缩小功能来执行此操作:
shrinkMe
类标记了我想要的所有元素此刻缩小/扩展
为此设置了CSS转换时间
shrinkMe
元素定义了一个
shrunken
类,其CSS具有所有尺寸参数设置为0
为了缩小或扩展,jQuery添加或删除了
shrunken
类别标签添加到$('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过渡就像另一个线程上的异步方法一样工作,所以,您需要等待它完成,而不是添加/删除类。
http://api.jquery.com/animate/
关于javascript - 对javascript中div嵌套集中的元素子集的动画收缩和展开过渡,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44608273/
10-12 06:51