为了账号安全,请及时绑定邮箱和手机立即绑定

无法在 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 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信