
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдиреАрдореЗрд╢рди рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ HTML рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЯреИрдЧ рдЬреЛрдбрд╝рдХрд░ CSS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛, рдпрд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдк рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдирд┐рдореЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЧреНрд░реАрдирд╕реЙрдХ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдордВрдЪ рд╣реИред рдПрдирд┐рдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдШрдЯрдХ рднреА рд╣реИрдВред рдЖрдЗрдП рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдЖрд▓реЗрдЦ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреЗ рдкрд╛рдБрдЪ рддрд░реАрдХреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ:
- рд╕реАрдПрд╕рдПрд╕;
- ReactTransitionGroup;
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдПрдирд┐рдореЗрд╢рди;
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЙрджреНрдШрд╛рдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ;
- TweenOne рдФрд░ рдЪреАрдВрдЯреА рдбрд┐рдЬрд╛рдЗрдиред
Skillbox рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢: рдСрди рд▓рд╛рдЗрди рд╢реИрдХреНрд╖рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо "рдкреЗрд╢реЗ рдЬрд╛рд╡рд╛-рдбреЗрд╡рд▓рдкрд░"
рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
рд╕рднреА рдЙрджрд╛рд╣рд░рдг
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ (рдпрд╣рд╛рдВ рд╕реЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп рд▓реЗрдЦ рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ рд╣реИ)ред
рд╕реАрдПрд╕рдПрд╕
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИред рдпрджрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдХрдИ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдФрд░ рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрд╡реЗрджрди рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдиреАрдореЗрд╢рди рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдПрдирд┐рдореЗрдЯреЗрдб рдореЗрдиреВ рд╣реИ:

рдпрд╣ рд╕реАрдПрд╕рдПрд╕ рд╕рдВрдкрддреНрддрд┐ рдФрд░ HTML рдЯреИрдЧ рдХреЗ рд▓рд┐рдП className = "is-nav-open" рдЬреИрд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкрд░ рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рдлрд╝реАрд▓реНрдб рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЪреВрдВрдХрд┐ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреА рдирд┐рд░рдВрддрд░ рдЪреМрдбрд╝рд╛рдИ 250px рд╣реИ, рдЗрд╕рд▓рд┐рдП рдорд╛рд░реНрдЬрд┐рди-рдмрд╛рдИрдВ рдпрд╛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЖрд╡рд░рдг рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕рдорд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдкрдХреЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд░реИрдкрд░ рдХреЗ рд▓рд┐рдП className = "is-nav-open" рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд░реИрдкрд░ рдХреЛ рдорд╛рд░реНрдЬрд┐рди-рд▓реЗрдлреНрдЯ / рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рдирдПрдХреНрд╕ рдкрд░ рд▓реЗ рдЬрд╛рдПрдВ: 0ред
рдЕрдВрдд рдореЗрдВ, рдПрдиреАрдореЗрд╢рди рд╕реНрд░реЛрдд рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
export default class ExampleCss extends Component { handleClick() { const wrapper = document.getElementById('wrapper'); wrapper.classList.toggle('is-nav-open') } render() { return ( <div id="wrapper" className="wrapper"> <div className="nav"> <icon className="nav__icon" type="menu-fold" onClick={() => this.handleClick()}/> <div className="nav__body"> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae ducimus est laudantium libero nam optio repellat sit unde voluptatum? </div> </div> </div> ); } }
рдФрд░ рдпрд╣рд╛рдБ рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рд╣реИрдВ:
.wrapper { display: flex; width: 100%; height: 100%; transition: margin .5s; margin: 0 0 0 -250px; } .wrapper.is-nav-open { margin-left: 0; } .nav { position: relative; width: 250px; height: 20px; padding: 20px; border-right: 1px solid #ccc; } .nav__icon { position: absolute; top: 0; right: -60px; padding: 20px; font-size: 20px; cursor: pointer; transition: color .3s; } .nav__icon:hover { color: #5eb2ff; }
рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдПрдиреАрдореЗрд╢рди рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдореБрдЦреНрдп рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗред
ReactTransitionGroup
ReactTransitionGroup рдШрдЯрдХ рдХреЛ ReactJS рд╕рдореБрджрд╛рдп рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рд╕рд╛рде, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд╕реАрдПрд╕рдПрд╕ рдПрдирд┐рдореЗрд╢рди рдФрд░ рдмрджрд▓рд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
ReactTransitionGroup рдХреЛ рдШрдЯрдХ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдЖрдХрд╛рд░ рд╣реИ, рдЗрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рдордЧреНрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЖрдХрд╛рд░ рдХреЛ рдереЛрдбрд╝рд╛ рдмрдврд╝рд╛ рджреЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕реАрдбреАрдПрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
ReactTransitionGroup рдореЗрдВ рддреАрди рддрддреНрд╡ рд╣реИрдВ, рдпреЗ Transition, CSSTransition рдФрд░ TransitionGroup рд╣реИрдВред рдЙрдирдореЗрдВ рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢реИрд▓реА, рдмрджрд▓реЗ рдореЗрдВ, рд╕реАрдПрд╕рдПрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдПрдиреАрдореЗрд╢рди рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред

рдкрд╣рд▓рд╛ рдХрджрдо CSSTransitionGroup рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╕рдВрдХреНрд░рдордг-рд╕рдореВрд╣ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕реВрдЪреА рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдФрд░ рдЯреНрд░рд╛рдВрд╕реНрдлрд╝реЙрд░реНрдордирд╛рдо рдЧреБрдг рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм рднреА рдЖрдк CSSTransitionGroup рдореЗрдВ рдХрд┐рд╕реА рдмрдЪреНрдЪреЗ рдХреЛ рдЬреЛрдбрд╝рддреЗ рдпрд╛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рдПрдирд┐рдореЗрдЯреЗрдб рд╕реНрдЯрд╛рдЗрд▓ рдорд┐рд▓рддреЗ рд╣реИрдВред
<CSSTransitionGroup transitionName="example"> {items} </CSSTransitionGroup>
рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рдирдирд╛рдо = "рдЙрджрд╛рд╣рд░рдг" рдЧреБрдг рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рд╢реИрд▓реА рдкрддреНрд░рдХ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдирд╛рдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
.example-enter { opacity: 0.01; } .example-enter.example-enter-active { opacity: 1; transition: opacity 300ms ease-in; } .example-leave { opacity: 1; } .example-leave.example-leave-active { opacity: 0.01; transition: opacity 300ms ease-in;
рдКрдкрд░ ReactTransitionGroup рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдЖрдкрдХреЛ рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдФрд░ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рд╣реИрдВрдбрдСрдб рд╡рд┐рдзрд┐ - рдпрд╣ рдирдП рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд╣ рддрдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд╛рд▓рддрд╛ рд╣реИред
рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рд╕рдВрдкрд░реНрдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рд░рдгреА рд╕рд░рдгреА, рд╣реИрдВрдбрд▓Remove рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
import React, { Component, Fragment } from 'react'; import { CSSTransitionGroup } from 'react-transition-group' import random from 'random-name' import Button from './button' import Item from './item' import './style.css'; export default class ReactTransitionGroup extends Component { constructor(props) { super(props); this.state = { items: ['Natividad Steen']}; this.handleAdd = this.handleAdd.bind(this); } handleAdd() { let newItems = this.state.items; newItems.push(random()); this.setState({ items: newItems }); } render () { const items = this.state.items.map((item, i) => ( <Item item={item} key={i} keyDelete={i} handleRemove={(i) => this.handleRemove(i)} /> )); return ( <Fragment> <Button onClick={this.handleAdd}/> <div className="project"> <CSSTransitionGroup transitionName="example" transitionEnterTimeout={500} transitionLeaveTimeout={300} > {items} </CSSTransitionGroup> </div> </Fragment> ); } };
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдирд┐рдореЗрд╢рди
рд░рд┐рдПрдХреНрдЯ-рдПрдирд┐рдореЗрд╢рди рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ animate.css рдкрд░ рдмрдиреА рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХрдИ рдЕрд▓рдЧ рдПрдиреАрдореЗрд╢рди рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд┐рд╕реА рднреА рдЗрдирд▓рд╛рдЗрди-рд╢реИрд▓реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ рдЬреЛ рд░реЗрдбрд┐рдпрдо, рдПрдлрд╝реНрд░реЛрдбрд╛рдЗрдЯ рдпрд╛ рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рд╕рд╣рд┐рдд рдПрдХ рдПрдиреАрдореЗрд╢рди рдХреЗ рдореБрдЦреНрдп рдлреНрд░реЗрдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ:

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрдЫрд╛рд▓ рдПрдиреАрдореЗрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдПрдирд┐рдореЗрд╢рди рд╕реЗ рдПрдиреАрдореЗрд╢рди рдЖрдпрд╛рдд рдХрд░реЗрдВред
const Bounce = styled.div`animation: 2s $ {рдХреАрдлрд╝реНрд░реЗрдо` $ {рдЙрдЫрд╛рд▓} `} рдЕрдирдВрдд`;рдлрд┐рд░, рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА HTML рдХреЛрдб рдпрд╛ рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред
<bounce><h1>Hello Animation Bounce</h1></bounce>
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
import React, { Component } from 'react'; import styled, { keyframes } from 'styled-components'; import { bounce } from 'react-animations'; import './style.css'; const Bounce = styled.div`animation: 2s ${keyframes`${bounce}`} infinite`; export default class ReactAnimations extends Component { render() { return ( <Bounce><h1>Hello Animation Bounce</h1></bounce> ); } }
рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдиреАрдореЗрд╢рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЙрдЫрд╛рд▓ рдПрдиреАрдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИ -
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЪреЗрддрди-рдСрди-рд╕реНрдХреНрд░реЙрд▓ ред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдкреНрд░рдХрдЯ
рд░рд┐рдПрдХреНрдЯ рд░рд┐рд╡реАрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдПрдирд┐рдореЗрд╢рди рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд▓реБрдкреНрдд рд╣реЛрддреА, рдкреНрд░рддрд┐рдмрд┐рдВрдм, рд╕реНрдХреЗрд▓рд┐рдВрдЧ, рд░реЛрдЯреЗрд╢рди рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╕рд╣рд╛рд░рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рднреА рдПрдирд┐рдореЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рддреЛ, рдЖрдк рд╕реНрдерд┐рддрд┐, рджреЗрд░реА, рджреВрд░реА, рдЭрд░рдирд╛ рдФрд░ рдЕрдиреНрдп рд╕рд╣рд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдп рд╕реАрдПрд╕рдПрд╕ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдПрдиреАрдореЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
import Fade from 'react-reveal/Fade'; <Fade top> <h1>Title</h1> </Fade>

рдХреБрд▓ рдкрд╛рдВрдЪ рдмреНрд▓реЙрдХ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдкреГрд╖реНрда рдФрд░ рдПрдХ рд╢реАрд░реНрд╖рдХ рд╣реИред
import React, { Component, Fragment } from 'react'; import Fade from 'react-reveal/Fade'; const animateList = [1, 2, 3, 4, 5]; export default class ReactReveal extends Component { render() { return ( <Fragment> {animateList.map((item, key) => ( <div style={styles.block} key={key}> <Fade top> <h1 style={styles.title}>{`block ${item}`}</h1> </Fade> </div> ))} </Fragment> ); } } const styles = { block: { display: 'flex', alignItems: 'center', justifyContent: 'center', width: '100%', height: '100%', background: '#000', borderBottom: '1px solid rgba(255,255,255,.2)', }, title: { textAlign: 'center', fontSize: 100, color: '#fff', fontFamily: 'Lato, sans-serif', fontWeight: 100, }, };
рдЕрдм рд╣рдо рдирд┐рд░рдВрддрд░ рдЪреЗрддрди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред рд╕рд░рдгреА рдореЗрдВ рдкрд╛рдБрдЪ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореИрдк рдРрд░реЗ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣реЗрдбрд░ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдХреЗ рдлреЗрдб рдШрдЯрдХреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╢реИрд▓реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдмреНрд▓реЙрдХ рдФрд░ рд╣реЗрдбрд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреА рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпрд╛рдБ рдорд┐рд▓рддреА рд╣реИрдВред рдКрдкрд░ рдлреАрдХрд╛ рдПрдиреАрдореЗрд╢рди рдХреЗ рд╕рд╛рде рдкрд╛рдВрдЪ рдмреНрд▓реЙрдХ рд╣реИрдВред
рдПрдВрдЯрдиреА рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ TweenOne рдФрд░ рдПрдиреАрдореЗрд╢рди
рдЪреАрдВрдЯреА рдбрд┐рдЬрд╛рдЗрди рдПрдХ рд░рд┐рдПрдХреНрдЯ рдпреВрдЖрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдФрд░ рдЖрд╕рд╛рди рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрд▓реАрдмрд╛рдмрд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд, рдЬреЛ рдЕрдкрдиреА рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреБрдЫ рдПрдирд┐рдореЗрдЯреЗрдб рдШрдЯрдХ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдХреЗ рд╕рдорд╛рди рдПрдирд┐рдореЗрд╢рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдКрдкрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рд╣реЛрдЧрд╛ред рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЧреЗрдВрдж, рдПрдХ рд╣рд░реА рдЧреЗрдВрдж рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд▓рд╛рд▓ рд╡рд░реНрдЧред

рдПрдиреАрдореЗрд╢рди TweenOne рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PathPlugin рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рдм рддрднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛
PathPlugin TweenOne.plugins рдкрд░ред
TweenOne.plugins.push(PathPlugin);
рдореБрдЦреНрдп рдПрдиреАрдореЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
- рдЕрд╡рдзрд┐ - рдПрдордПрд╕ рдореЗрдВ рдПрдиреАрдореЗрд╢рди рдХрд╛ рд╕рдордп;
- рд╕рд╣рдЬрддрд╛ - рдПрдиреАрдореЗрд╢рди рдХреА рдЪрд┐рдХрдирд╛рдИ;
- рдпреЛрдпреЛ - рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдЖрдВрджреЛрд▓рди рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди;
- рджреЛрд╣рд░рд╛рдирд╛ - рдПрдиреАрдореЗрд╢рди рджреЛрд╣рд░рд╛рдирд╛ред рдЖрдкрдХреЛ рдЕрдВрддрд╣реАрди рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП -1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;
- рдкреА - рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ;
- easPath - рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реБрдЧрдо рдкрде рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХред
рдЕрдВрддрд┐рдо рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
const duration = 7000; const ease = 'easeInOutSine'; const p = 'M123.5,89.5 C148,82.5 239.5,48.5 230,17.5 C220.5,-13.5 127,6 99.5,13.5 C72,21 -9.5,56.5 1.5,84.5 C12.5,112.5 99,96.5 123.5,89.5 Z'; const easePath = 'M0,100 C7.33333333,89 14.3333333,81.6666667 21,78 C25.3601456,75.6019199 29.8706084,72.9026327 33,70 C37.0478723,66.2454406 39.3980801,62.0758689 42.5,57 C48,46.5 61.5,32.5 70,28 C77.5,23.5 81.5,20 86.5,16 C89.8333333,13.3333333 94.3333333,8 100,0'; const loop = { yoyo: true, repeat: -1, duration, ease, };
рдЕрдм рдЖрдк рдПрдиреАрдореЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- RedSquare рдореЗрдВ рд▓реВрдк рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рд╣реИрдВ рдФрд░ Y рд╕рдордиреНрд╡рдп, рдЕрд╡рдзрд┐ рдФрд░ рд╡рд┐рд▓рдВрдм рд╣реИрдВред
- рдЧреНрд░реАрдирдмреЙрд▓ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХреНрд╕ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкрде рд╣реЛрддрд╛ рд╣реИ, y - рдкреА рдХрд╛ рдореВрд▓реНрдпред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрд╡рдзрд┐, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рдЪрд┐рдХрдирд╛рдИ TweenOne.easing.path рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред
- рдкрде - рд╕рд╣рдЬрддрд╛ред
- lengthPixel рдПрдХ рд╡рдХреНрд░ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ 400 рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред
- рдЯреНрд░реИрдХ - рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдВрдбрд╛рдХрд╛рд░, рдЗрд╕рдореЗрдВ рдЪрдХреНрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдФрд░ рдПрдХ рд░реЛрдЯреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред
const animate = { redSquare: { ...loop, y: 15, duration: 3000, delay: 200, }, greenBall: { path: { x: p, y: p }, duration: 5000, repeat: -1, ease: TweenOne.easing.path(easePath, { lengthPixel: 400 }), }, track: { ...loop, rotate: 15, }, };
рдЖрдкрдХреЛ TweenOne рдШрдЯрдХ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдЖрд░рд╕реА-рдЯреНрд╡реАрди-рд╡рди рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред TweenOne рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░реЙрдкрд░ рдФрд░ рдПрдирд┐рдореЗрдЯреЗрдб рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдШрдЯрдХ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдирд┐рдореЗрд╢рди рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ TweenOne рдХреЗ рдЕрдкрдиреЗ рдПрдиреАрдореЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ redSquare, track, greenBallред
import React from 'react'; import TweenOne from 'rc-tween-one'; export default function BannerImage() { return ( <div className="wrapper-ant-design"> <svg width="482px" height="500px" viewBox="0 0 482 500"> <defs> <path d="M151,55 C129.666667,62.6666667 116,74.3333333 110,90 C104,105.666667 103,118.5 107,128.5 L225.5,96 C219.833333,79 209.666667,67 195,60 C180.333333,53 165.666667,51.3333333 151,55 L137,0 L306.5,6.5 L306.5,156 L227,187.5 L61.5,191 C4.5,175 -12.6666667,147.833333 10,109.5 C32.6666667,71.1666667 75,34.6666667 137,0 L151,55 Z" id="mask" /> </defs> <g stroke="none" strokeWidth="1" fill="none" fillRule="evenodd" transform="translate(0, 30)"> <g id="Group-13" transform="translate(0.000000, 41.000000)"> <TweenOne component="g" animation={animate.redSquare}> <rect stroke="#F5222D" strokeWidth="1.6" transform="translate(184.000000, 18.000000) rotate(8.000000) translate(-184.000000, -18.000000) " x="176.8" y="150.8" width="14.4" height="14.4" rx="3.6" /> </TweenOne> </g> <g id="Group-14" transform="translate(150.000000, 230.000000)"> <g id="Group-22" transform="translate(62.000000, 7.000000)"> <image id="cc4" alt="globe" xlinkHref="https://gw.alipayobjects.com/zos/rmsportal/FpKOqFadwoFFIZFExjaf.png" width="151px" height="234px" /> </g> <mask id="mask-2"> <use xlinkHref="#mask" fill="white" transform="translate(-42, -33)" /> </mask> <g mask="url(#mask-2)"> <TweenOne component="g" animation={animate.track} style={{ transformOrigin: '122.7px 58px' }}> <g transform="translate(-16, -52)"> <g transform="translate(16, 52)"> <path d="M83.1700911,35.9320015 C63.5256194,37.9279025 44.419492,43.1766434 25.8517088,51.6782243 C14.3939956,57.7126276 7.77167019,64.8449292 7.77167019,72.4866248 C7.77167019,94.1920145 61.1993389,111.787709 127.105708,111.787709 C193.012078,111.787709 246.439746,94.1920145 246.439746,72.4866248 C246.439746,55.2822262 212.872939,40.6598106 166.13127,35.3351955" id="line-s" stroke="#0D1A26" strokeWidth="1.35" strokeLinecap="round" transform="translate(127.105708, 73.561453) rotate(-16.000000) translate(-127.105708, -73.561453) " /> </g> <TweenOne component="g" animation={animate.greenBall}> <image alt="globe" id="id2" xlinkHref="https://gw.alipayobjects.com/zos/rmsportal/IauKICnGjGnotJBEyCRK.png" x="16" y="62" width="26px" height="26px" /> </TweenOne> </g> </TweenOne> </g> </g> </g> </svg> </div> ); }
7.77167019,64.8449292 7.77167019,72.4866248 C7.77167019,94.1920145 61.1993389,111.787709 127.105708,111.787709 C193.012078,111.787709 246.439746,94.1920145 реирекрем.рек,рейреп,ренрекрем import React from 'react'; import TweenOne from 'rc-tween-one'; export default function BannerImage() { return ( <div className="wrapper-ant-design"> <svg width="482px" height="500px" viewBox="0 0 482 500"> <defs> <path d="M151,55 C129.666667,62.6666667 116,74.3333333 110,90 C104,105.666667 103,118.5 107,128.5 L225.5,96 C219.833333,79 209.666667,67 195,60 C180.333333,53 165.666667,51.3333333 151,55 L137,0 L306.5,6.5 L306.5,156 L227,187.5 L61.5,191 C4.5,175 -12.6666667,147.833333 10,109.5 C32.6666667,71.1666667 75,34.6666667 137,0 L151,55 Z" id="mask" /> </defs> <g stroke="none" strokeWidth="1" fill="none" fillRule="evenodd" transform="translate(0, 30)"> <g id="Group-13" transform="translate(0.000000, 41.000000)"> <TweenOne component="g" animation={animate.redSquare}> <rect stroke="#F5222D" strokeWidth="1.6" transform="translate(184.000000, 18.000000) rotate(8.000000) translate(-184.000000, -18.000000) " x="176.8" y="150.8" width="14.4" height="14.4" rx="3.6" /> </TweenOne> </g> <g id="Group-14" transform="translate(150.000000, 230.000000)"> <g id="Group-22" transform="translate(62.000000, 7.000000)"> <image id="cc4" alt="globe" xlinkHref="https://gw.alipayobjects.com/zos/rmsportal/FpKOqFadwoFFIZFExjaf.png" width="151px" height="234px" /> </g> <mask id="mask-2"> <use xlinkHref="#mask" fill="white" transform="translate(-42, -33)" /> </mask> <g mask="url(#mask-2)"> <TweenOne component="g" animation={animate.track} style={{ transformOrigin: '122.7px 58px' }}> <g transform="translate(-16, -52)"> <g transform="translate(16, 52)"> <path d="M83.1700911,35.9320015 C63.5256194,37.9279025 44.419492,43.1766434 25.8517088,51.6782243 C14.3939956,57.7126276 7.77167019,64.8449292 7.77167019,72.4866248 C7.77167019,94.1920145 61.1993389,111.787709 127.105708,111.787709 C193.012078,111.787709 246.439746,94.1920145 246.439746,72.4866248 C246.439746,55.2822262 212.872939,40.6598106 166.13127,35.3351955" id="line-s" stroke="#0D1A26" strokeWidth="1.35" strokeLinecap="round" transform="translate(127.105708, 73.561453) rotate(-16.000000) translate(-127.105708, -73.561453) " /> </g> <TweenOne component="g" animation={animate.greenBall}> <image alt="globe" id="id2" xlinkHref="https://gw.alipayobjects.com/zos/rmsportal/IauKICnGjGnotJBEyCRK.png" x="16" y="62" width="26px" height="26px" /> </TweenOne> </g> </TweenOne> </g> </g> </g> </svg> </div> ); }

рд╣рд╛рдВ, рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдиреАрдореЗрд╢рди рд╕рд░рд▓ рд╣реИред
<TweenOne component="g" animation={animate.redSquare} /> <TweenOne component="g" animation={animate.track} /> <TweenOne component="g" animation={animate.greenBall} />
рдЖрдкрдХреЛ рдмрд╕ рдПрдиреАрдореЗрд╢рди рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ ToneyOne рдШрдЯрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред
рд╡рд┐рднрд┐рдиреНрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдХрдИ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рд╕рд╣реА рдЪрдпрди рдХрд░рдирд╛ рд╣реИред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: