try animate change content container

This commit is contained in:
DmitriyB
2022-07-25 18:09:10 +05:30
parent 3a53ad9e8c
commit 7d28bb5054
2 changed files with 52 additions and 12 deletions
+27
View File
@@ -60,6 +60,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 30px; gap: 30px;
transition: .5s;
} }
.main-part-text-container { .main-part-text-container {
@@ -185,3 +186,29 @@
opacity: 0; opacity: 0;
transition: .3s; transition: .3s;
} }
/* starting ENTER animation */
.change-main-part-content-enter {
opacity: 0;
transform: translateY(0);
}
/* ending ENTER animation */
.change-main-part-content-enter-active {
opacity: 1;
transition: .3s;
transform: translateY(0);
}
/* starting EXIT animation */
.change-main-part-content-exit {
opacity: 1;
transform: translateY(0);
}
/* ending EXIT animation */
.change-main-part-content-exit-active {
opacity: 0;
transition: .3s;
transform: translateY(0);
}
+20 -7
View File
@@ -1,14 +1,15 @@
import React, { useState } from "react"; import React, { useEffect, useRef, useState } from "react";
import './mainPart.css'; import './mainPart.css';
import { PinkButton } from "./button"; import { PinkButton } from "./button";
import { MainPartHeader } from "./mainPartHeader"; import { MainPartHeader } from "./mainPartHeader";
import { ContentContainer } from "./contentContainer"; import { ContentContainer } from "./contentContainer";
import { MainPartFooter } from "./main-part-footer"; import { MainPartFooter } from "./main-part-footer";
import { OrLineContainer } from "./orLineContainer"; import { OrLineContainer } from "./orLineContainer";
import { CSSTransition } from "react-transition-group"; import { CSSTransition, TransitionGroup } from "react-transition-group";
export const MainPart: React.FC = React.memo(() => { export const MainPart: React.FC = React.memo(() => {
const changeContent = useRef(0);
const [showBackground, setShowBackground] = useState<boolean>(false); const [showBackground, setShowBackground] = useState<boolean>(false);
const [currentContent, setCurrentContent] = useState<JSX.Element>( const [currentContent, setCurrentContent] = useState<JSX.Element>(
<ContentContainer <ContentContainer
@@ -19,6 +20,10 @@ export const MainPart: React.FC = React.memo(() => {
/> />
); );
useEffect(() => {
// changeContent.current += 1;
}, [currentContent])
function onClickStartDemo() { function onClickStartDemo() {
setCurrentContent( setCurrentContent(
<> <>
@@ -27,13 +32,13 @@ export const MainPart: React.FC = React.memo(() => {
descriptText="Начните новую демонстрацию жилого комплекса" descriptText="Начните новую демонстрацию жилого комплекса"
onClickButton={() => onClickCreateNewDemo()} onClickButton={() => onClickCreateNewDemo()}
textButton='Начать новую демонстрацию' textButton='Начать новую демонстрацию'
/> />
<OrLineContainer /> <OrLineContainer />
<ContentContainer <ContentContainer
descriptText="Запланируйте демонстрацию с сотрудником отдела продаж" descriptText="Запланируйте демонстрацию с сотрудником отдела продаж"
onClickButton={() => onClickPlaneDemo()} onClickButton={() => onClickPlaneDemo()}
textButton='Запланировать демонстрацию' textButton='Запланировать демонстрацию'
/> />
</> </>
) )
} }
@@ -69,9 +74,17 @@ export const MainPart: React.FC = React.memo(() => {
return <div className="main-part-container"> return <div className="main-part-container">
<div className="background-image"></div> <div className="background-image"></div>
<MainPartHeader /> <MainPartHeader />
<div className="main-part-content"> <TransitionGroup>
{currentContent} <CSSTransition
</div> key={changeContent.current}
timeout={300}
classNames={'change-main-part-content'}
>
<div className="main-part-content">
{currentContent}
</div>
</CSSTransition>
</TransitionGroup>
<CSSTransition <CSSTransition
in={showBackground} in={showBackground}
timeout={300} timeout={300}