javascript - 我在重新渲染时隐藏的 react 组件上的动画过渡

标签 javascript jquery css reactjs

我正在使用 reactjs 并且我有一个日期选择器组件,当用户在组件元素外部单击时我会隐藏它。

代码片段是这样的:

`
class DatePicker extends Component{
   constructor(props){
      super(props)
      state= { focus: false }  // when focus: false i hide the dates component 
  }    
  .......
  render(){
    const { focus } = this.state

    return(
      <input type="text" placeholder="start date">
      <input type="text" placeholder="start date">
      {focus &&  <DatesContainer ...props>} // if focus==false i dont show the <DatesContainer> component.I need to hide it with fade out or something.
    )
  }
}`

所以当用户点击<DatesContainer/>之外的地方时state.focus 更新为 false,重新渲染,这次是 <DatesContainer/>根本没有渲染,到目前为止还不错。但我需要用 0.3 秒的动画隐藏它。

对此有何看法?

最佳答案

我的回答与之前的回答不同的是,您可以为某些动画关键帧设置特定的 Action 。

关键点是提供动画名称作为函数参数

CSS

.Modal {
    position: fixed;
    top: 30%;
    left: 25%;
    transition: all 0.3s ease-out;
}
.ModalOpen {
    animation: openModal 0.4s ease-out forwards;
}
.ModalClosed {
    animation: closeModal 0.4s ease-out forwards;
}

@keyframes openModal {
    0% { transform: translateY(-100%); }
    100% { transform: translateY(0);   }
}

@keyframes closeModal {
    0% { transform: translateY(0); }
    100% { transform: translateY(-100%);}
}

JS

const modal = ({ 
  isShown, isMounted, 
  initiateUnmountAction, unmountAction
}) => {
  const cssClasses = [
    "Modal",
    props.isShown ? "ModalOpen" : "ModalClosed"
  ];
  return (
    <Fragment>
      {isMounted && <div className={cssClasses.join(' ')}
        onAnimationEnd={event => 
          {event.animationName == "closeModal" && unmountAction}
      }>
        <h1>A Modal</h1>
        <button className="Button" onClick={initiateUnmountAction}>
          Dismiss
      </button>
      </div>}
    </Fragment>

  );
};

关于javascript - 我在重新渲染时隐藏的 react 组件上的动画过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54492111/

相关文章:

javascript - 在 jQuery 中添加工具提示

Chrome 中的 css 反转过滤器

javascript - 如何用 html 元素替换粗体、下划线等文本?

javascript - 没有不必要的约束限制文本区域的输入

javascript - 通过简单的计算将 Excel 电子表格转换为在线网格

javascript - css() 没有为 body 标签设置背景属性

javascript - jQuery.on() 是如何工作的?

jQuery、JSON、Flickr API

javascript - 在 IE 中单击小部件内的滚动条时,Gridster 小部件会粘在鼠标上

javascript - 动画下划线 react 失败