<…">
当前位置:首页 > JavaScript

js 实现进度条

2026-01-16 13:35:10JavaScript

使用 HTML 和 CSS 创建基础结构

进度条需要一个容器和一个填充元素。HTML 结构可以简单如下:

<div class="progress-container">
  <div class="progress-bar" id="progressBar"></div>
</div>

CSS 样式控制外观:

.progress-container {
  width: 100%;
  height: 20px;
  background-color: #f0f0f0;
  border-radius: 10px;
  overflow: hidden;
}

.progress-bar {
  height: 100%;
  width: 0%;
  background-color: #4CAF50;
  transition: width 0.3s ease;
}

通过 JavaScript 更新进度

使用 style.width 属性动态更新进度条宽度:

function updateProgress(percent) {
  const progressBar = document.getElementById('progressBar');
  progressBar.style.width = percent + '%';
}

// 示例:更新到50%
updateProgress(50);

实现动画效果

结合 requestAnimationFrame 实现平滑动画:

function animateProgress(targetPercent, duration = 1000) {
  const progressBar = document.getElementById('progressBar');
  const startWidth = parseFloat(progressBar.style.width) || 0;
  const startTime = performance.now();

  function step(currentTime) {
    const elapsed = currentTime - startTime;
    const progress = Math.min(elapsed / duration, 1);
    const currentPercent = startWidth + (targetPercent - startWidth) * progress;

    progressBar.style.width = currentPercent + '%';

    if (progress < 1) {
      requestAnimationFrame(step);
    }
  }

  requestAnimationFrame(step);
}

// 示例:动画过渡到75%
animateProgress(75);

监听实际任务进度

对于真实任务(如文件上传),可以结合事件监听:

// 模拟上传进度事件
const uploadTask = {
  start: function() {
    let progress = 0;
    const interval = setInterval(() => {
      progress += 5;
      updateProgress(progress);

      if (progress >= 100) {
        clearInterval(interval);
      }
    }, 200);
  }
};

// 触发上传
document.querySelector('button').addEventListener('click', () => uploadTask.start());

添加文本百分比显示

在进度条内显示当前进度:

<div class="progress-bar" id="progressBar">
  <span class="progress-text">0%</span>
</div>

更新 JavaScript:

function updateProgress(percent) {
  const progressBar = document.getElementById('progressBar');
  progressBar.style.width = percent + '%';
  progressBar.querySelector('.progress-text').textContent = Math.round(percent) + '%';
}

响应式设计考虑

通过 CSS 变量实现可定制化:

.progress-container {
  --progress-color: #4CAF50;
  --progress-height: 10px;
}

.progress-bar {
  background-color: var(--progress-color);
  height: var(--progress-height);
}

浏览器兼容性处理

对于旧版浏览器,添加前缀或降级方案:

function updateProgress(percent) {
  const progressBar = document.getElementById('progressBar');
  progressBar.style.width = percent + '%';
  progressBar.style.webkitTransition = 'width 0.3s ease'; // 针对Webkit内核
}

js 实现进度条

标签: 进度条js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pas…