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

JavaScript进度条出现无限循环uncaught TypeError报错求解

JavaScript进度条无限报TypeError问题修复

问题现象

进度条初始计数阶段可正常运行,进度走到100%后控制台无限抛出Uncaught TypeError,提示无法设置style属性,后续入场动画完全失效。

错误原因

一共4处代码问题,直接触发报错:

  • GSAP库名拼写错误:GSAP动画库的全局暴露对象名为gsap,代码中写为gasp,脚本刚运行到第一行就会报gasp未定义的引用错误,直接打断后续所有代码的执行。
  • DOM元素获取失败:因为第一行的报错,var bar = document.getElementById("barconfirm")这行赋值逻辑根本没机会运行,bar变量始终是undefined,定时器每隔10ms执行一次进度更新,每次访问bar.style都会触发类型错误,这就是控制台无限抛错的直接原因。
  • GSAP动画参数格式错误:gsap.to()的参数规则是第一个参数传要做动画的元素选择器,第二个传动画配置,第三个传时间轴偏移量。原代码把"#percent"、"#bar"两个选择器拆成两个独立参数传入,GSAP会把第二个选择器字符串当成动画配置解析,完全无法识别规则。要给多个元素加相同动画,把多个选择器写在同一个字符串里用逗号分隔即可。
  • 类选择器漏写前缀:最后一段动画的目标写为"container h1",实际container是class类名,选择器中类名前必须加.,否则程序会识别为查找<container>自定义标签,找不到对应的标题元素。

修复后完整代码

JavaScript部分

// 修正库名拼写错误 gasp -> gsap
const tll = gsap.timeline({
  paused: true
});

// 修正多元素选择器写法,两个目标合并到同一个字符串参数
tll.to("#percent, #bar", {
  duration: .2,
  opacity: 0,
  zIndex: -1
});

tll.to("#preloader", {
  duration: .8,
  width: "0%"
});

tll.from(".container", {
  duration: 1.5,
  y: "-150%"
}, "-=.2");

// 修正类选择器,container前加类名标识.
tll.to(".container h1", {
  opacity: 1,
  textShadow: "12px 20px rgba(255, 255, 255,0.23)",
  skewY: 10,
  y: "10%",
  stagger: {
    amount: .4
  }
});

var width = 1;
// 第一行错误修复后,这行可以正常执行,能正确获取到进度条DOM元素
var bar = document.getElementById("barconfirm");
var id;

function move() {
  id = setInterval(frame, 10);
}

function frame() {
  if (width > 100) {
    clearInterval(id);
    tll.play();
  } else {
    width++;
    bar.style.width = width + "%";
    document.getElementById("percent").innerHTML = width + "%";
  }
}

CSS部分(原代码逻辑正常,无需修改)

* {
  margin: 0;
  padding: 0;
  overflow: hidden;
}

#preloader {
  position: absolute;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100vh;
  z-index: 100;
  background-color: #0f0f0f;
  flex-direction: column;
}

#percent {
  color: white;
  font-family: "Neutral Face";
}

#bar {
  width: 60%;
  margin-top: 20%;
}

#barconfirm {
  width: 1%;
  padding: 1px 0px;
  background-color: white;
}

.container {
  position: absolute;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100vh;
  background-color: gray;
}

.container h1 {
  font-family: 'Monument';
  text-transform: uppercase;
  font-size: 40px;
  opacity: 0;
}

HTML部分(补全闭合标签,原逻辑正常)

<body onload="move()">
  <div id="preloader">
    <div id="percent">1%</div>
    <div id="bar">
      <div id="barconfirm"></div>
    </div>
  </div>
  <div class="container">
    <h1>Leo Clemente</h1>
  </div>
</body>

提醒:运行代码前记得先引入GSAP库文件,不然还是会报找不到gsap对象的错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:21:30