要实现一个高度变化时滑出的效果,可以使用 React 的动画库,并结合 CSS 过渡效果。

首先,安装 React 动画库。执行以下命令:

npm install react-transition-group

然后,创建一个组件,并使用'Transition'组件来包装需要进行动画的元素。在'Transition'组件中,使用'in'属性来控制元素的显示和隐藏,使用'timeout'属性来设置动画的持续时间。

在'Transition'组件内部,使用'CSSTransition'组件来添加 CSS 过渡效果。设置'classNames'属性为自定义的类名,用于在元素的不同状态之间切换。在 CSS 中,可以根据这些类名来定义不同状态下的样式。

下面是一个示例代码:

import React, { useState } from 'react';
import { Transition, CSSTransition } from 'react-transition-group';
import './styles.css';

const App = () => {
  const [show, setShow] = useState(false);

  const handleToggle = () => {
    setShow(!show);
  };

  return (
    <div>
      <button onClick={handleToggle}>Toggle</button>
      <Transition in={show} timeout={300}>
        {(state) => (
          <div className={`box ${state}`}>
            <CSSTransition
              in={show}
              timeout={300}
              classNames='slide'
              unmountOnExit
            >
              <div className='content'>Hello, world!</div>
            </CSSTransition>
          </div>
        )}
      </Transition>
    </div>
  );
};

export default App;

在上述代码中,'box'类名用于设置元素的初始样式,'slide-enter'和'slide-exit'类名用于设置元素进入和退出时的动画效果。

接下来,在 CSS 文件中定义这些类名的样式:

.box {
  width: 200px;
  overflow: hidden;
  transition: height 300ms;
  height: 0;
}

.box.enter {
  height: 100px;
}

.box.exit {
  height: 0;
}

.content {
  background-color: #f1f1f1;
  padding: 10px;
}

.slide-enter {
  transform: translateY(-100%);
  opacity: 0;
}

.slide-enter-active {
  transform: translateY(0);
  opacity: 1;
  transition: transform 300ms, opacity 300ms;
}

.slide-exit {
  transform: translateY(0);
  opacity: 1;
}

.slide-exit-active {
  transform: translateY(-100%);
  opacity: 0;
  transition: transform 300ms, opacity 300ms;
}

在上述代码中,'box'类名的高度在进入和退出时进行过渡动画,'slide-enter'和'slide-exit'类名的内容在进入和退出时进行滑动动画。

最后,将上述组件渲染到 DOM 中即可。

注意:上述代码中使用了 CSS 过渡效果,所以需要在项目中引入对应的 CSS 文件,并配置相应的构建工具(例如 Webpack)来处理 CSS 文件。

希望对你有所帮助!

ReactJS 实现高度变化时滑出内容的动画效果

原文地址: https://www.cveoy.top/t/topic/qbKZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录