javascript+css实现进度条效果

下面是实现进度条效果的攻略:

1.基本原理

进度条通常是在页面的顶部或底部显示的,用来展示某个任务的完成进度。实现进度条的基本原理是,通过JavaScript控制元素的宽度达到动画效果。然后结合CSS使进度条更美观。

2. 实现步骤

2.1 HTML结构

首先需要在HTML中添加进度条的结构,通常情况下进度条是一个<div>元素,同时为了更好地控制进度条的样式,通常还需要添加一个父元素。

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

2.2 CSS样式

接着添加进度条的CSS样式,主要包括进度条的长度、背景颜色、进度条的颜色等。

.progress-bar-container {
  width: 100%;
  height: 20px;
  background-color: #eaeaea;
}

.progress-bar {
  height: 100%;
  background-color: #3498db;
  width: 0%;
  transition: width .5s ease-in-out;
}

2.3 JavaScript

然后是JavaScript的部分,它具体实现了进度条的动画效果。通常情况下,通过一定逻辑控制进度条达到动画效果,可以用定时器实现。

// 获取进度条元素
const progressBar = document.querySelector('.progress-bar');
// 获取父容器元素
const progressContainer = document.querySelector('.progress-bar-container');

let progress = 0;
let intervalId = null;

// 进度条动画
function startProgressAnimation() {
  intervalId = setInterval(() => {
    progress++;
    progressBar.style.width = `${progress}%`;

    // 判断是否达到最大值
    if (progress >= 100) {
      clearInterval(intervalId);
    }
  }, 30);
}

// 触发动画
startProgressAnimation();

在上面的代码中,我们首先获取了进度条和父容器的元素,然后通过设置定时器来控制进度条的宽度变化,并且在达到100%时清除定时器,停止进度条的动画。

2.4 示例:

下面是两个示例来演示如何实现进度条效果。

示例一:单次进度条

例如一个网页在加载的时候,需要显示进度条。下面的示例展示了如何实现这个功能。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Single progress bar</title>
  <style>
    .progress-bar-container {
      width: 100%;
      height: 20px;
      background-color: #eaeaea;
    }
    .progress-bar {
      height: 100%;
      background-color: #3498db;
      width: 0%;
      transition: width .5s ease-in-out;
    }
  </style>
</head>
<body>

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

  <script>
    // 获取进度条元素
    const progressBar = document.querySelector('.progress-bar');
    // 获取父容器元素
    const progressContainer = document.querySelector('.progress-bar-container');

    let progress = 0;
    let intervalId = null;

    // 进度条动画
    function startProgressAnimation() {
      intervalId = setInterval(() => {
        progress++;
        progressBar.style.width = `${progress}%`;

        // 判断是否达到最大值
        if (progress >= 100) {
          clearInterval(intervalId);
        }
      }, 30);
    }

    // 触发动画
    startProgressAnimation();
  </script>
</body>
</html>

示例二:多次进度条

下面这个示例是一个简单的上传文件进度条,一次性上传多个文件时,需要分别显示各个文件的上传进度。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Multiple progress bars</title>
  <style>
    .file-upload {
      background-color: #eaeaea;
      height: 30px;
      line-height: 30px;
      margin-bottom: 10px;
    }
    .file-upload .progress-bar {
      height: 100%;
      background-color: #3498db;
      width: 0%;
      transition: width .5s ease-in-out;
    }
  </style>
</head>
<body>

  <div class="file-upload">
    File 1: 
    <div class="progress-bar"></div>
  </div>
  <div class="file-upload">
    File 2: 
    <div class="progress-bar"></div>
  </div>
  <div class="file-upload">
    File 3: 
    <div class="progress-bar"></div>
  </div>

  <script>
    // 获取进度条元素
    const progressBar1 = document.querySelector('.file-upload:nth-child(1) .progress-bar');
    const progressBar2 = document.querySelector('.file-upload:nth-child(2) .progress-bar');
    const progressBar3 = document.querySelector('.file-upload:nth-child(3) .progress-bar');

    let progress1 = 0;
    let progress2 = 0;
    let progress3 = 0;
    let intervalId1 = null;
    let intervalId2 = null;
    let intervalId3 = null;

    // 进度条动画
    function startProgressAnimation1() {
      intervalId1 = setInterval(() => {
        progress1++;
        progressBar1.style.width = `${progress1}%`;

        // 判断是否达到最大值
        if (progress1 >= 100) {
          clearInterval(intervalId1);
        }
      }, 30);
    }
    function startProgressAnimation2() {
      intervalId2 = setInterval(() => {
        progress2++;
        progressBar2.style.width = `${progress2}%`;

        // 判断是否达到最大值
        if (progress2 >= 100) {
          clearInterval(intervalId2);
        }
      }, 30);
    }
    function startProgressAnimation3() {
      intervalId3 = setInterval(() => {
        progress3++;
        progressBar3.style.width = `${progress3}%`;

        // 判断是否达到最大值
        if (progress3 >= 100) {
          clearInterval(intervalId3);
        }
      }, 30);
    }

    // 触发动画
    startProgressAnimation1();
    startProgressAnimation2();
    startProgressAnimation3();
  </script>
</body>
</html>

在上面的代码中,我添加了一个父容器,同时在其中添加多个子元素,每个子元素都是一个文件上传项,包括文件名和上传进度条。通过JavaScript分别控制各个文件的上传进度条。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript+css实现进度条效果 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 手写TypeScript 时很多人常犯的几个错误

    当我们手写TypeScript时,很容易会犯一些常见的错误。在这里,我来分享一些常见的错误,并提供一些示例说明和解决方案。 1. 类型声明不正确 在TypeScript中,类型声明非常重要,而类型声明不正确则会导致代码中的错误。例如: function add(num1, num2) { return num1 + num2; } let result = …

    JavaScript 2023年6月10日
    00
  • 纯JS实现根据CSS的class选择DOM

    实现根据CSS的class选择DOM,可以使用document.getElementsByClassName()方法来完成。这个方法会返回所有符合指定class name的元素的一个类数组对象。但是需要注意的是,该方法在低版本的IE浏览器中不支持,所以最好搭配使用checkBrowser()函数,来进行浏览器兼容性的处理。 以下是完成该功能的具体步骤: 步骤…

    JavaScript 2023年6月10日
    00
  • javascript弹性运动效果简单实现方法

    下面是详细讲解“javascript弹性运动效果简单实现方法”的完整攻略: 1. 什么是弹性运动效果 弹性运动效果是指物体在移动过程中,会受到一个向相反方向的阻力,使得物体在移动过程中产生“弹性”的效果,类似于弹簧。 2. 实现原理 要实现弹性运动效果,我们需要用到以下三个关键参数: 目标位置 当前位置 速度 具体实现原理如下: 当前位置与目标位置之间的差值…

    JavaScript 2023年5月28日
    00
  • JS基础系列之正则表达式

    JS基础系列之正则表达式 正则表达式(Regular Expression)是一个描述字符模式的对象。一般用于字符串的匹配、查找、替换等。JavaScript 通过内置对象 RegExp 提供对正则表达式的支持。本文将提供一些正则表达式的基础知识和用法,让你轻松入门。 创建正则表达式 正则表达式可以采用字面量形式或者使用 RegExp 构造函数创建。其中字符…

    JavaScript 2023年6月10日
    00
  • Vue透传Attributes使用解析

    Vue透传Attributes使用解析 在Vue组件开发中,透传Attributes是一个十分实用的功能。它可以将一个有用的属性从组件传递到内部元素中,而不用在每一个内层组件中重新定义该属性。这篇文章将介绍透传Attributes的使用方法,以及两个示例来说明该功能如何在Vue中发挥作用。 什么是透传Attributes 透传Attributes就是把父组件…

    JavaScript 2023年6月10日
    00
  • JavaScript删除数组元素的方法指南

    JavaScript删除数组元素的方法指南 JavaScript是一种非常流行的编程语言,它拥有强大的数组功能。在JavaScript中,数组是一种特殊类型的对象,它们被用来存储一组有序的数据。有时候,在处理数组数据时,我们需要删除一个或多个数组元素。那么,JavaScript中有哪些删除数组元素的方法呢? splice方法 splice方法是JavaScr…

    JavaScript 2023年5月27日
    00
  • JS数据类型STRING使用实例解析

    关于“JS数据类型STRING使用实例解析”的攻略,我可以为你提供以下内容。 什么是JS中的字符串(STRING)类型? 字符串是JS中最常用的一种数据类型,用于表示文本,由一系列Unicode字符组成。在JS中,字符串以单引号、双引号或反引号 包裹起来,这三种方式是等价的。 比如: // 使用单引号包括字符串 let str1 = ‘Hello World…

    JavaScript 2023年5月28日
    00
  • js中将字符串转换成json的三种方式

    将字符串转换成 JSON 对象,在 JavaScript 中实际上有三种方式。 方法一:使用 JSON.parse() JSON.parse() 方法将 JSON 格式的字符串转换成 JavaScript 对象。 let jsonString = ‘{"name": "Tom", "age": 20…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部