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日

相关文章

  • JavaScript的模块化:封装(闭包),继承(原型) 介绍

    JavaScript的模块化是一种将代码按照一定方式进行组织的方法。在JavaScript中,我们可以使用封装和继承实现模块化。 封装 封装是一种通过闭包实现的模块化方式,可以将一些数据和函数放在一个私有的作用域中,从而避免污染全局变量,同时将一些方法暴露出来,使之成为共有的API。 示例1 下面是一个简单的封装示例,通过IIFE(立即调用的函数表达式)创建…

    JavaScript 2023年6月10日
    00
  • 《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型

    《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型 原始类型 ECMAScript 中有 6 种原始类型:Undefined、Null、Boolean、Number、String 和 Symbol。这些数据类型都是通过值来标识的。原始类型的值是不可更改的。 Undefined 和 Null Undefined 和 Null …

    JavaScript 2023年5月27日
    00
  • BootstrapValidator验证用户名已存在(ajax)

    让我来为你详细讲解“BootstrapValidator验证用户名已存在(ajax)”的完整攻略。 标题 首先,我们需要给这个攻略起个标题。根据内容,可以考虑起名为“BootstrapValidator验证用户名已存在(ajax)”。 说明 为了实现这个功能,我们需要用到以下内容: BootstrapValidator插件 Ajax请求来检查用户名是否已存在…

    JavaScript 2023年6月10日
    00
  • JS 自动完成 AutoComplete(Ajax 查询)

    下面我将详细讲解 JS 自动完成 AutoComplete(Ajax 查询) 的完整攻略。 什么是 JS 自动完成 AutoComplete? JS 自动完成 AutoComplete 是前端开发中常用的一种交互技术,它可以实现输入框中的关键字联想提示和自动完成。通常情况下,我们通过 Ajax 查询服务器获取关键字列表,然后将返回的结果展示在输入框下面,用户…

    JavaScript 2023年6月11日
    00
  • JavaScript文本特效实例小结【3个示例】

    下面是对于“JavaScript文本特效实例小结【3个示例】”这篇文章的详细攻略。 JavaScript文本特效实例小结【3个示例】 1. 第一个示例 文章中第一个示例是实现一个文本逐字递增效果,代码如下: let speed = 80; // 每个字停顿的时间(ms) let text = ‘Hello World!’; // 需要展示的文本 let co…

    JavaScript 2023年5月28日
    00
  • vue router的基本使用和配置教程

    以下是关于“vue router的基本使用和配置教程”的详细攻略: 背景介绍 Vue是一个流行的JavaScript库,它提供了一种轻量级的方式来构建交互式Web界面。Vue Router是作为Vue.js的官方路由管理器而开发的。借助Vue Router,您可以在多个视图之间进行无缝导航。本文将介绍如何使用Vue Router。 一、安装Vue Route…

    JavaScript 2023年6月11日
    00
  • JavaScript中的Function函数

    下面是关于JavaScript中的Function函数的完整攻略: 1. Function函数概述 Function函数是JavaScript中最基本的一种类型,使用Function函数可以将代码封装成一个可重复使用的函数,在代码执行时可以多次调用,从而提高代码的灵活性和复用性。一个Function函数实际上是一个对象,有具体的属性和方法供我们调用,同时也可…

    JavaScript 2023年5月27日
    00
  • webpack-bundle-analyzer 插件配置使用方法

    下面是 webpack-bundle-analyzer 插件配置使用方法的详细攻略。 什么是 webpack-bundle-analyzer 插件 webpack-bundle-analyzer 是一个可视化分析工具,可以帮助我们分析打包结果。它会生成可视化报告,包含了打包后文件的大小、文件依赖等信息,让我们更加直观地了解打包结果,从而进行针对性的优化。 配…

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