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 {
@@ -184,4 +185,30 @@
.show-background-exit-active { .show-background-exit-active {
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);
} }
+25 -12
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,18 +32,18 @@ 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='Запланировать демонстрацию'
/> />
</> </>
) )
} }
function onClickCreateNewDemo() { function onClickCreateNewDemo() {
setCurrentContent( setCurrentContent(
<ContentContainer <ContentContainer
titleText="Демонстрация запущена" titleText="Демонстрация запущена"
@@ -47,7 +52,7 @@ export const MainPart: React.FC = React.memo(() => {
textButton='Подключиться' textButton='Подключиться'
accessCode="1876" accessCode="1876"
/> />
) )
} }
function onClickPlaneDemo() { function onClickPlaneDemo() {
@@ -69,14 +74,22 @@ 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}
classNames='show-background' classNames='show-background'
unmountOnExit unmountOnExit
> >
<div className="background-container"></div> <div className="background-container"></div>
</CSSTransition> </CSSTransition>