Javascript 是否可以使用CSS设置动态高度动画?接受JS替代方案
我正在使用Javascript 是否可以使用CSS设置动态高度动画?接受JS替代方案,javascript,css,angularjs,css-animations,Javascript,Css,Angularjs,Css Animations,我正在使用AngularJS,它允许我使用ng show和ng hide根据逻辑条件显示和隐藏元素。我试图实现的是,当子对象显示为隐藏时,为容器的大小更改设置动画,这样它就不那么跳跃了 对于那些不熟悉AngularJS的人,ng show和ng hide基本上只是应用了display:none和display:block属性。因此,当容器设置为show时,显示设置为block 有了这些,我通过几页谷歌搜索阅读了有关设置高度变化动画的内容,我能找到的只是使用max height将高度从一个高度设置
AngularJS
,它允许我使用ng show
和ng hide
根据逻辑条件显示和隐藏元素。我试图实现的是,当子对象显示为隐藏时,为容器的大小更改设置动画,这样它就不那么跳跃了
对于那些不熟悉AngularJS
的人,ng show
和ng hide
基本上只是应用了display:none
和display:block
属性。因此,当容器设置为show
时,显示设置为block
有了这些,我通过几页谷歌搜索阅读了有关设置高度变化动画的内容,我能找到的只是使用max height
将高度从一个高度设置为另一个高度的例子,这些都是由CSS规则静态定义的,例如:
#animated-div {
max-height: 100px;
transition: max-height 1s ease;
}
#animated-div.hidden {
max-height: 0px;
}
他们将删除.hidden
类,以使转换为高度变化设置动画
问题是我没有打开/关闭容器,并且没有预先确定容器的高度,因为可以根据各种变量动态修改容器。除此之外,应用程序的响应速度很快,因此不同设备的高度会有所不同
下面是一个示例场景:
- Container
- Div A (Height: 200px); Shown
- Div B (Height: 100px); Shown
- Div C (Height: 300px); Hidden
- Div Slider (Height: Dynamic) Hidden.
目前,容器的高度(即auto
)是基于子容器的300px
,现在用户切换Div C active,这会将高度增加到600px
,此时Div应设置从300px->600px
展开的动画,此时用户单击清除按钮,容器的子容器都是隐藏的,容器应该从600px->0px
设置动画
然后,用户开始使用滑块,其值范围为0到100
。此高度应用于Div滑块
。假设用户滑到57。这将导致从0px->57px
播放动画,因为没有显示任何div
很抱歉,我想要的是一个深入的例子,但这是我唯一能思考的解释方法。作为参考,使用%
值和vw/vh
值动态缩放容器中的子对象。当某个子级组合处于活动状态时,容器的大小在不同的分辨率下永远不会相同,因此这必须能够为高度的动态变化设置动画
欢迎使用Javascript示例,但是对于本项目,我不希望涉及任何其他库,Javascript示例必须在现代移动浏览器上运行。您的问题让我思考了一会儿,最后我提出了一个有趣的解决方案
与其尝试设置父元素的动画,不如设置新子元素的动画
我已经创建了一个能做到这一点的。
我正在使用CSS动画实现“显示”和“隐藏”效果
以下是主要动画的少量代码:
.parent{
width:33%;
overflow:hidden;
.child{
padding:.5rem;
border:1px solid #78909C;
border-bottom:0;
color:#fff;
animation:slideDown .2s ease-in forwards; //set basic "show" animation
transform-origin:top center; // set proper transform origin
&.removed{
animation:slideUp .2s ease-in forwards; // add different animation for "hide"
}
&:nth-child(even){background:#78909C;}
&:nth-child(odd){background:#546E7A;}
&:last-child{border-bottom:1px solid #78909C;}
}
}
我不确定这是否完美地解决了您的问题,但这肯定会对您有所帮助。您的问题让我思考了一会儿,最后我想出了一个有趣的解决方案
与其尝试设置父元素的动画,不如设置新子元素的动画
我已经创建了一个能做到这一点的。
我正在使用CSS动画实现“显示”和“隐藏”效果
以下是主要动画的少量代码:
.parent{
width:33%;
overflow:hidden;
.child{
padding:.5rem;
border:1px solid #78909C;
border-bottom:0;
color:#fff;
animation:slideDown .2s ease-in forwards; //set basic "show" animation
transform-origin:top center; // set proper transform origin
&.removed{
animation:slideUp .2s ease-in forwards; // add different animation for "hide"
}
&:nth-child(even){background:#78909C;}
&:nth-child(odd){background:#546E7A;}
&:last-child{border-bottom:1px solid #78909C;}
}
}
我不确定这是否完美地解决了你的问题,但这肯定会对你有所帮助