You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React+Material UI中实现点击触发的CSS左右滑动切换动画?

React+CSS侧边栏双向点击滑动解决方案

当前问题总结

  • 依赖硬编码定时器自动切换动画,无法通过第二次点击触发反向滑动
  • 必须等待第一个动画结束才能再次交互
  • 直接操作DOM修改类名,不符合React状态驱动的开发理念

1. 重构React组件逻辑

移除定时器和DOM操作,完全通过menuOpen状态控制动画方向,点击时直接翻转状态:

const Portfolio = ({menuOpen, setMenuOpen}) => {
  // 点击时直接翻转menuOpen状态,无需定时器
  const toggleSlide = () => {
    setMenuOpen(prev => !prev);
  }

  return (
    <Grid container className='PortfolioGrid' sx={{position: 'relative'}}>
      <Grid item xs={6} className='PortfolioLeft'>
        hello
      </Grid>
      <Grid item xs={6} className='PortfolioRight'>
        <Box
          onClick={toggleSlide}
          className={`PortfolioRightImg ${menuOpen ? 'slide-left' : 'slide-right'}`}
          component="img"
          alt="The house from the offer."
          src={img}       
        />
      </Grid>
    </Grid>
  );
}

2. 简化CSS动画配置

合并重复样式,用同一个基础类配合修饰类控制动画方向,同时保留动画结束状态:

.PortfolioGrid{
    background-color: aquamarine;

    .PortfolioLeft{
        background-color: bisque;
    }

    .PortfolioRight{
        background-color: rgb(205, 255, 220);

        .PortfolioRightImg{
            height: calc(100vh * 3/12);
            width: calc(100vw * 2/12);
            position: relative;
            animation-duration: 3s;
            animation-fill-mode: forwards;
        }

        /* 左滑动画 */
        .PortfolioRightImg.slide-left{
            animation-name: slide-left;
        }

        /* 右滑动画 */
        .PortfolioRightImg.slide-right{
            animation-name: slide-right;
        }
    }
}

@keyframes slide-left {
    from { left: 0; }
    to { left: calc((100vw * 2/12) * (-1)); }
}

@keyframes slide-right {
    from { left: calc((100vw * 2/12) * (-1)); }
    to { left: 0; }
}

关键改进点

  • 状态驱动交互:通过React状态直接控制动画方向,点击即时响应,无需等待定时器
  • 避免DOM操作:用动态className绑定替代原生DOM修改,符合React开发规范
  • 样式复用:合并重复的基础样式,减少代码冗余
  • 动画状态保持:通过animation-fill-mode: forwards让元素停在动画结束位置

内容的提问来源于stack exchange,提问作者hullergabby123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:15:32