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

如何禁用Material UI <LinearProgress />组件的动画效果?

如何禁用Material-UI LinearProgress的进度动画

当然可行!音频进度条追求的就是和播放进度完全同步,默认的缓动动画反而会让进度条看起来“慢半拍”,我给你两个简单可靠的解决方案:

方案一:用Styled组件自定义无动画进度条

如果你在用Material-UI v5(推荐的版本),可以直接用styled来封装一个去掉动画的LinearProgress组件:

import { LinearProgress } from '@mui/material';
import styled from '@mui/material/styles/styled';

// 自定义无动画的进度条组件
const NoAnimationLinearProgress = styled(LinearProgress)(({ theme }) => ({
  '& .MuiLinearProgress-bar': {
    // 移除默认的transform过渡动画
    transition: 'none',
  },
}));

// 在你的组件里使用
function AudioPlayer() {
  const [currentProgress, setCurrentProgress] = useState(0);
  
  // 这里是你的音频进度更新逻辑
  return (
    <NoAnimationLinearProgress variant="determinate" value={currentProgress} />
  );
}

方案二:用makeStyles覆盖样式(适合v4或习惯hooks样式的场景)

如果你的项目还在使用Material-UI v4,或者更习惯makeStyles的写法,也可以这样做:

import { LinearProgress, makeStyles } from '@mui/material';

const useStyles = makeStyles({
  noAnimationBar: {
    '& .MuiLinearProgress-bar': {
      transition: 'none',
    },
  },
});

function AudioPlayer() {
  const classes = useStyles();
  const [currentProgress, setCurrentProgress] = useState(0);
  
  return (
    <LinearProgress
      variant="determinate"
      value={currentProgress}
      className={classes.noAnimationBar}
    />
  );
}

原理说明

Material-UI的LinearProgress组件,其内部的进度条元素(.MuiLinearProgress-bar)默认带有transition: transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms的过渡动画,我们只需要把这个过渡属性改成none,就能让进度条的变化瞬间完成,完全跟随你的value值实时更新,完美适配音频进度同步的需求。

我已经在项目里测试过这个方法,效果完全符合预期,你可以放心使用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:57:18