Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以使用CSS设置动态高度动画?接受JS替代方案_Javascript_Css_Angularjs_Css Animations - Fatal编程技术网

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;}
  }
}
我不确定这是否完美地解决了你的问题,但这肯定会对你有所帮助