如何使用react-transition-group實現React中緊貼的轉場動畫?

如何使用react-transition-group實現React中緊貼的轉場動畫?

React中使用react-transition-group實現無縫切換動畫

在React開發中,react-transition-group是實現組件間動畫切換的常用庫。然而,在實際應用中,開發者經常會遇到動畫效果不理想的情況,例如組件切換時出現空白區域,導致動畫不夠流暢。本文將分析此問題并提供解決方案。

問題描述:目標是實現一個從右向左滑動的組件切換動畫,要求兩個組件在動畫過程中緊密相連,無任何間隙。但實際效果卻出現組件間留白。

問題代碼示例:

<SwitchTransition>   <cssTransition classNames="checkout" key={this.state.isPhone} timeout={500}>     {this.state.isPhone ? (       <Phone handleBack={() => this.setPhoneState(false)} handlePhoneClick={this.handlePhoneClick} />     ) : (       <Main handlePhoneClick={this.handlePhoneClick} />     )}   </CSSTransition> </SwitchTransition>

對應的CSS樣式:

.checkout-enter {   transform: translateX(100%); } .checkout-enter-active {   transform: translateX(0);   transition: all 500ms; }  .checkout-exit {   transform: translateX(0); } .checkout-exit-active {   transform: translateX(-100%);   transition: all 500ms; }

問題分析:上述CSS代碼定義了動畫的進出場效果,但未考慮組件在動畫過程中的位置關系,導致組件間出現空隙。

解決方案:關鍵在于使用position: absolute屬性,并精確控制組件在動畫過程中的位置。

修正后的CSS樣式:

.checkout-enter {   position: absolute;   right: 0;   transform: translateX(100%); } .checkout-enter-active {   transform: translateX(0);   transition: all 500ms; }  .checkout-exit {   position: absolute;   left: 0;   transform: translateX(0); } .checkout-exit-active {   transform: translateX(-100%);   transition: all 500ms; }

通過設置position: absolute,并分別將進入和退出的組件定位到容器的右側和左側,確保組件在動畫過程中始終緊密相連,從而消除空白區域,實現無縫切換動畫效果。 這使得動畫更流暢,用戶體驗更佳。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享