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

如何用JavaScript实现从两端向中间耗尽的进度条?

实现从两端向中间耗尽的进度条

要实现从两端同时耗尽、最终在中间完成的进度条,你可以基于CSS自定义属性和动画(或JS控制)来实现,以下是两种实用方案:

方案1:纯CSS自动播放版

这种方案无需JS,直接通过CSS动画完成从满状态到完全耗尽的效果,视觉流畅且易于调整:

<div class="timer-bar"></div>
.timer-bar {
  --duration: 5s; /* 可自定义总耗时 */
  width: 100%;
  height: 24px;
  background-color: #e0e0e0; /* 进度条底色 */
  position: relative;
  overflow: hidden;
  border-radius: 12px; /* 可选:添加圆角优化视觉 */
}

.timer-bar::before {
  content: "";
  position: absolute;
  inset: 0;
  background-color: #2196f3; /* 进度条填充色 */
  animation: shrink-both-ends var(--duration) linear forwards;
}

@keyframes shrink-both-ends {
  0% {
    /* 初始状态:完全显示 */
    clip-path: inset(0 0 0 0);
  }
  100% {
    /* 结束状态:左右各裁剪50%,进度条完全耗尽 */
    clip-path: inset(0 50% 0 50%);
  }
}

原理说明

利用clip-path: inset()属性动态裁剪进度条的可见区域:动画从左右两端同时向内收缩,最终裁剪至中间线(宽度为0),实现“从两端耗尽”的效果。通过--duration自定义属性可以快速调整总耗时。


方案2:JS可控版

如果需要手动控制进度(比如暂停、重置、根据业务逻辑调整进度),可以用自定义属性配合JS实现:

<div class="timer-bar"></div>
.timer-bar {
  width: 100%;
  height: 24px;
  background-color: #e0e0e0;
  position: relative;
  overflow: hidden;
  border-radius: 12px;
}

.timer-bar::before {
  content: "";
  position: absolute;
  top: 0;
  /* 左右边距随--progress变量同步增加 */
  left: calc(var(--progress, 0) * 0.5%);
  right: calc(var(--progress, 0) * 0.5%);
  height: 100%;
  background-color: #2196f3;
  transition: left 0.1s, right 0.1s; /* 可选:添加过渡动画让变化更平滑 */
}
const timerBar = document.querySelector(".timer-bar");
let progress = 0;
const totalDuration = 5000; // 总耗时5秒
const interval = setInterval(() => {
  progress += (100 / (totalDuration / 50)); // 每50ms更新一次进度
  timerBar.style.setProperty("--progress", progress);
  
  if (progress >= 100) {
    clearInterval(interval);
    console.log("进度条已耗尽");
  }
}, 50);

原理说明

通过CSS变量--progress控制进度条的左右边距:当--progress从0增加到100时,左右边距各从0增加到50%,进度条的可见区域就会从两端向中间收缩。JS部分负责按时间递增--progress的值,也可以根据需求随时修改该变量实现暂停、重置等操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:15:27