同时触发多个'transitions'
Trigger multipe 'transitions' at the same time
有谁知道如何从两个独立的组件播放过渡
同时使用相同的样式。
这是一个视频,它显示了我的问题。
https://youtu.be/WNu4Mdfn98U
重要CSS部分
.Container_Active .Description {
max-height: 500px;
margin-top: 5px;
color: var(--ifm-color-on-primary);
transition: max-height 1000ms ease-in; /* Transiation 1 */
}
.Description {
max-height: 0;
margin: 0;
font-size: var(--ifm-font-size-18);
overflow: hidden;
transition: max-height 1000ms ease-out; /* Transiation 2 */
}
重要的 HMTL 部分
<div
className={clsx(styles.Container, {
[styles.Container_Active]: active,
})}
>
</div>
<SectionRightItem
key={i}
title={section.title}
description={section.description}
onClick={() => {
setIndex(i);
}}
icon={section.icon}
active={index === i}
/>
我的目标是一个元素慢慢显示描述,同时另一个元素慢慢隐藏展开的描述。
但是不知何故,转换是连续播放的,尽管它们是同时触发的。
谢谢^^
实际上你的动画是同时开始的,但问题是你使用 max-height
的过渡值太高了,所以过渡将从 [=14= 的高度开始] 到 0px
,但是你的内容高度甚至没有达到它的一半,所以看起来你的转换之间有延迟
要解决此问题,您可以降低 .Container_Active
的值以匹配您的实际描述高度,或将其更改为 height
而不是 max-height
并使用 您实际描述的平均身高
这里有一个关于 max-height
(浅蓝色)和 height
(红色)之间的区别的简单片段,这使得您的过渡看起来像是被延迟了,两者都是 height
/ max-height
未打开时设置为0
,打开时设置为10em
$(function() {
setInterval(function() {
$('div').toggleClass('open');
}, 1500);
});
div {
position: absolute;
}
#front {
max-height: 0;
overflow: hidden;
background: lightblue;
transition: max-height 1000ms ease-in-out;
padding-left: 3em;
}
#front.open {
max-height: 10em;
transition: max-height 1000ms ease-in-out;
}
#back {
height: 0;
background: red;
transition: height 1000ms ease-in-out;
opacity: .75;
}
#back.open {
height: 10em;
transition: height 1000ms ease-in-out;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='front' class='open'>
Hello World Welcome<br/>World</br>Welcome
</div>
<div id='back' class='open'>
BACK
</div>
有谁知道如何从两个独立的组件播放过渡 同时使用相同的样式。
这是一个视频,它显示了我的问题。
https://youtu.be/WNu4Mdfn98U
重要CSS部分
.Container_Active .Description {
max-height: 500px;
margin-top: 5px;
color: var(--ifm-color-on-primary);
transition: max-height 1000ms ease-in; /* Transiation 1 */
}
.Description {
max-height: 0;
margin: 0;
font-size: var(--ifm-font-size-18);
overflow: hidden;
transition: max-height 1000ms ease-out; /* Transiation 2 */
}
重要的 HMTL 部分
<div
className={clsx(styles.Container, {
[styles.Container_Active]: active,
})}
>
</div>
<SectionRightItem
key={i}
title={section.title}
description={section.description}
onClick={() => {
setIndex(i);
}}
icon={section.icon}
active={index === i}
/>
我的目标是一个元素慢慢显示描述,同时另一个元素慢慢隐藏展开的描述。 但是不知何故,转换是连续播放的,尽管它们是同时触发的。
谢谢^^
实际上你的动画是同时开始的,但问题是你使用 max-height
的过渡值太高了,所以过渡将从 [=14= 的高度开始] 到 0px
,但是你的内容高度甚至没有达到它的一半,所以看起来你的转换之间有延迟
要解决此问题,您可以降低 .Container_Active
的值以匹配您的实际描述高度,或将其更改为 height
而不是 max-height
并使用 您实际描述的平均身高
这里有一个关于 max-height
(浅蓝色)和 height
(红色)之间的区别的简单片段,这使得您的过渡看起来像是被延迟了,两者都是 height
/ max-height
未打开时设置为0
,打开时设置为10em
$(function() {
setInterval(function() {
$('div').toggleClass('open');
}, 1500);
});
div {
position: absolute;
}
#front {
max-height: 0;
overflow: hidden;
background: lightblue;
transition: max-height 1000ms ease-in-out;
padding-left: 3em;
}
#front.open {
max-height: 10em;
transition: max-height 1000ms ease-in-out;
}
#back {
height: 0;
background: red;
transition: height 1000ms ease-in-out;
opacity: .75;
}
#back.open {
height: 10em;
transition: height 1000ms ease-in-out;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id='front' class='open'>
Hello World Welcome<br/>World</br>Welcome
</div>
<div id='back' class='open'>
BACK
</div>