React Transition Group으로 더 많은 애니메이션 미리보기 및 보기
Preview & View More 구성 요소가 다른 레이아웃 애니메이션의 미리 보기 및 보기에 React Transition Group 사용.
높은 수준에서 시도할 수 있는 CSS 애니메이션의 여러 가지 방법을 생각할 수 있습니다. 이 블로그에서는
Preview
및 View More
구성 요소가 다른 Preview
및 View More
종류의 레이아웃에 대해 이야기합니다.Expanded content
속성에 애니메이션을 적용할 것이기 때문에 Collapsed content
및 max-height
의 대략적인 높이를 미리 알고 있어야 합니다.이제 축소 단계에서
Expanded content
를 Collapsed content
로 교체하면 버벅거림과 함께 갑자기 발생합니다. 이 문제를 해결하려면 다음과 같은 애니메이션 전략을 채택해야 합니다.확장 단계 중
Collapsed content
를 Expanded content
로 바꿉니다.붕괴 단계 동안
Collapsed content
높이로 애니메이션합니다. 이것은 Expanded content
가 Collapsed content
보다 더 크고 갑작스럽게 줄어들지 않고 높이 변화를 수용할 수 있기 때문입니다Expanded content
를 Collapsed content
로 바꿉니다이를 달성하기 위해
CSSTransition
의 react-transition-group
모듈을 사용합니다.다음과 같은 접힌 콘텐츠 구성요소가 있다고 가정해 보겠습니다.
const CollapsedContent = (props) => {
return (
<div className="collapsed">
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>
<p>
Asperiores iste magnam dolores eius ab laboriosam excepturi, consectetur
consequuntur maiores at voluptas ipsam cum reiciendis assumenda tenetur
natus in omnis deleniti.
</p>
</div>
);
};
그리고 다음 확장 콘텐츠 구성 요소
const ExpandedContent = (props) => {
return (
<div className="expanded">
<p>
It is a long established fact that a reader will be distracted by the
readable content of a page when looking at its layout. The point of
using Lorem Ipsum is that it has a more-or-less normal distribution of
letters, as opposed to using 'Content here, content here', making it
look like readable English.
</p>
<p>
There are many variations of passages of Lorem Ipsum available, but the
majority have suffered alteration in some form, by injected humour, or
randomised words which don't look even slightly believable.
</p>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Asperiores iste
magnam dolores eius ab laboriosam excepturi, consectetur consequuntur
maiores at voluptas ipsam cum reiciendis assumenda tenetur natus in
omnis deleniti.
</p>
</div>
);
};
기본 또는 오케스트레이션 구성 요소에서 2개의 부울을 추가해야 합니다.
따라서 애니메이션이 시작되면
isCollapsed
를 false
로 전환하고 애니메이션이 끝나면 isCollapsed
를 true
로 전환합니다.이렇게 하면 위에서 언급한 전략에 따라 애니메이션을 만들 수 있습니다.
주성분
export const Main = () => {
const [isCollapsed, setIsCollapsed] = useState(true);
const [isAnimating, setIsAnimating] = useState(false);
return (
<div>
<div className="card">
<CSSTransition
in={isAnimating}
timeout={200}
classNames="content-switching"
onEntering={() => {
setIsCollapsed(false);
}}
onExited={() => {
setIsCollapsed(true);
}}
>
<div className="base">
{isCollapsed && <CollapsedContent />}
{!isCollapsed && <ExpandedContent />}
</div>
</CSSTransition>
</div>
<button
onClick={() => setIsAnimating((prev) => !prev)}
style={{ display: "block" }}
>
{isCollapsed ? "Show" : "Hide"}
</button>
</div>
);
};
여기서 볼 수 있듯이 사용자가
Show
또는 Hide
버튼을 클릭하면 isAnimating
플래그만 토글됩니다.그런 다음
CSSTransition
구성 요소는 수명 주기 메서드( isCollapsed
및 onEntering
)를 기반으로 onExited
플래그 전환을 처리합니다.완성된 결과:
전체 소스 코드는 여기에서 확인할 수 있습니다.
github.com/rohanBagchi/react-height-animation-tryout
여기까지 읽어주셔서 감사합니다.
Reference
이 문제에 관하여(React Transition Group으로 더 많은 애니메이션 미리보기 및 보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rohanbagchi/preview-and-view-more-animation-with-react-transition-group-14il텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)