亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法在 ReactJS 上為模態動畫

無法在 ReactJS 上為模態動畫

慕田峪4524236 2024-01-18 15:01:44
我目前正在創建模式的自定義實現。到目前為止,一切都工作得很好,但我似乎無法為其設置動畫,也無法理解它。這是我的模態組件 import React from 'react'import Slider from './Slider'import {IoIosCloseCircleOutline} from "react-icons/io"import styled from "styled-components";export default function Modal(props) {    const Modal = styled.div `    transform: translateX(${({animateSlideInRight}) => (animateSlideInRight ? "0" : "100vw")});    transition: transform 1s;    width: 1000px;    height: 650px;    z-index: 100;    position: fixed;    background: white;    transition: all 1.1s ease-out;    box-shadow:       -2rem 2rem 2rem rgba(black, 0.2);    visibility: visible;    display: flex;    border-bottom-right-radius: 100px;    `    const closeModal = () => {        props.setShow(false)    }    const data = props.data    if (!props.show) {        return null    }    return (        <div className="modalWrapper">              <Modal className="modal" id="modal" animateSlideInRight = {props.show}>                <div className="modalHeaderWrapper">                <IoIosCloseCircleOutline className="modalCloseCross" onClick={closeModal}/>                    <img src={data[0].logo} alt="logo" />                    <h2>{data[0].title}</h2>                </div>                <div className="modalRightFlex">                    <Slider                         images={[data[0].image1Carrousel, data[0].image2Carrousel, data[0].image3Carrousel]}                    />                </div>            </Modal>        </div>    )}正如你所看到的,我的模態是一個styledComponent定義是否根據顯示狀態在 X 中進行翻譯的 a 。在我的場景中,我必須提升狀態,因為我是通過單擊卡片來打開此模式的,該卡片本身是一個不同的組件,因此它們的祖先正在處理狀態。我當前的模態 CSS 如樣式化的 div 中所示。我嘗試過的事情1-嘗試使用常規 div 并通過帶有關鍵幀的 CSS 處理動畫 --> 它適用于滑入,但當我關閉時卻不會(在這種情況下,我的顯示狀態使用不同的模式為模態定義了一個類名)他們每個人的動畫)2-嘗試設置動畫狀態并className根據該狀態是真還是假來定義。當我關閉時它第一次工作(盡管必須在將 animate 設置為 false 和 show 設置為 false 之間引入動畫持續時間超時),但隨后它就會變得瘋狂并開始到處閃爍。無論如何,有人可以看到這個問題嗎?非常感謝
查看完整描述

1 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

您應該在渲染它的組件的外部范圍中定義Modal,動畫不會完成,并且您可以通過在下一個渲染時重新定義它來重置它。


還應該重置動畫none而不是給出實際長度。


此外,可能有更多相關的 CSS 錯誤可以隱藏您的modal動畫,例如z-index和position,如果您的問題集中在動畫問題上,您應該消除它周圍的所有噪音。


請參閱工作示例:


const Animation = styled.div`

  transform: ${({ animate }) => (animate ? "none" : "translateX(500px)")};

  transition: transform 1s;

`;


function Modal(props) {

  return <Animation animate={props.show}>hello</Animation>;

}


function Component() {

  const [show, toggle] = useReducer((p) => !p, false);

  return (

    <>

      <Modal show={show} />

      <button onClick={toggle}>show</button>

    </>

  );

}

null另外,當您不想設置動畫時,您不應該返回,否則您將丟失關閉動畫。


// remove this code

if (!props.show) {

  return null;

}


查看完整回答
反對 回復 2024-01-18
  • 1 回答
  • 0 關注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號