• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

使用 ProgressBar.js 创建时尚且响应迅速的进度条

网络上的任何事情都不会立即发生。唯一的区别在于完成一个过程所需的时间。有些过程可能会在几毫秒内发生,而其他过程可能需要几秒钟或几分钟。例如,您可能正在编辑用户上传的非常大的图像,此过程可能需要一些时间。在这种情况下,最好让访问者知道该网站并没有卡在某个地方,但它实际上正在处理您的图像并取得了一些进展。

使用 ProgressBar.js 创建时尚且响应迅速的进度条  第1张

向读者展示流程进展情况的最常见方法之一是使用进度条。在本教程中,您将学习如何使用ProgressBar.js 库创建具有简单和复杂形状的不同进度条。

创建基本进度条

在项目中包含该库后,使用该库创建进度条就很容易了。所有主流浏览器都支持 ProgressBar.js,包括 IE9+,这意味着您可以放心地在您正在创建的任何网站中使用它。您可以从GitHub获取最新版本的库或直接使用CDN 链接将其添加到您的项目中。

为避免任何意外行为,请确保进度条的容器与进度条具有相同的纵横比。在圆形的情况下,容器的纵横比应为1:1,因为宽度将等于高度。在半圆的情况下,容器的纵横比应该是2:1,因为宽度将是高度的两倍。类似地,对于简单的线条,容器的纵横比应为100:strokeWidth的线条。

当创建带有直线、圆形或半圆形的进度条时,您可以简单地使用ProgressBar.Shape()创建进度条的方法。在这种情况下,Shape可以是Circle、Line或SemiCircle。您可以将两个参数传递给该Shape()方法。第一个参数是选择器或 dom 节点,用于标识进度条的容器。第二个参数是一个带有决定进度条外观的键值对的对象。

color您可以使用该属性指定进度条的颜色。默认情况下,您创建的任何进度条都将具有深灰色。可以使用该strokeWidth属性指定进度条的粗细。您应该记住,这里的宽度不是以像素为单位,而是以画布大小的百分比表示。例如,如果画布是 200px 宽,则strokeWidth值为 5 将创建一条 10px 厚的线。

除了主进度条外,该库还允许您绘制一条拖尾线,向读者展示进度条移动的路径。可以使用该属性指定尾线的颜色,trailColor并可以使用该属性指定其宽度trailWidth。就像 一样strokeWidth,该trailWidth属性也以百分比计算宽度。

进度条从初始状态到最终状态所用的总时间可以使用该duration属性来指定。默认情况下,进度条将在 800 毫秒内完成动画

您可以使用该easing属性来指定进度条在动画期间应如何移动。linear默认情况下,所有进度条都会以一定速度移动。为了使动画更具吸引力,您可以将此值设置为其他值,例如easeIn、easeOut、easeInOut或bounce。

指定初始参数值后,您可以使用该animate()方法为进度条设置动画。该参数接受三个参数。第一个参数是您希望为进度线设置动画的量。其他两个参数是可选的。第二个参数可用于覆盖您在初始化期间设置的任何动画属性值。第三个参数是一个回调函数,用于在动画结束后执行其他操作。

在下面的示例中,我使用我们目前讨论的所有属性创建了三个不同的进度条。

var lineBar = new ProgressBar.Line('#line-container', {
    color: 'orange',
    strokeWidth: 2,
    trailWidth: 0.5
});
 
lineBar.animate(1, {
    duration: 1000
});
 
var circleBar = new ProgressBar.Circle('#circle-container', {
    color: 'white',
    strokeWidth: 2,
    trailWidth: 10,
    trailColor: 'black',
    easing: 'easeInOut'
});
 
circleBar.animate(0.75, {
    duration: 1500
});
 
var semiBar = new ProgressBar.SemiCircle('#semi-container', {
    color: 'violet',
    strokeWidth: 2,
    trailWidth: 0.5,
    easing: 'bounce'
});
 
semiBar.animate(1, {
    duration: 3000
});

See the Pen  Basic Progress Bars by Envato Tuts+ (@tutsplus)  on CodePen.

使用进度条为文本值设置动画

上例中进度条动画的唯一变化是它们的长度。但是,ProgressBar.js 还允许您更改其他物理属性,例如描边线的宽度和颜色。在这种情况下,您必须在参数内指定进度条的初始值,并在初始化进度条时from指定参数内的最终值to。

您还可以告诉库创建带有进度条的随附文本元素,以向您的用户显示一些文本信息。文本可以是从静态值到指示动画进度的数值的任何内容。该text参数将接受一个对象作为其值。

该对象可以有一个value参数来指定要在元素内显示的初始文本。您还可以使用参数提供要添加到文本元素的类名className。如果要对文本元素应用一些内联样式,可以将它们全部指定为style参数的值。可以通过将 的值设置为 来删除所有默认style样式null。重要的是要记住,默认值仅适用于您没有为内部的任何 css 属性设置自定义值的情况style。

如果您不自行更新,则文本元素内的值将在整个动画期间保持不变。幸运的是,ProgressBar.js 还提供了一个step参数,可用于定义每个动画步骤调用的函数。由于此函数每秒将被调用多次,因此您需要小心使用它并保持其内部的计算简单。

var lineBar = new ProgressBar.Line("#line-container", {
  strokeWidth: 4,
  trailWidth: 0.5,
  from: { color: "#FF9900" },
  to: { color: "#00FF99" },
  text: {
    value: '0',
    className: 'progress-text',
    style: {
      color: 'black',
      position: 'absolute',
      top: '-30px',
      padding: 0,
      margin: 0,
      transform: null
    }
  },
  step: (state, shape) => {
    shape.path.setAttribute("stroke", state.color);
    shape.setText(Math.round(shape.value() * 100) + ' %');
  }
});
 
lineBar.animate(1, {
  duration: 4000
});
 
var circleBar = new ProgressBar.Circle("#circle-container", {
  color: "white",
  strokeWidth: 2,
  trailWidth: 25,
  trailColor: "black",
  easing: "easeInOut",
  from: { color: "#FF9900", width: 1 },
  to: { color: "#FF0099", width: 25 },
  text: {
    value: '0',
    className: 'progress-text',
    style: {
      color: 'black',
      position: 'absolute',
      top: '45%',
      left: '42%',
      padding: 0,
      margin: 0,
      transform: null
    }
  },
  step: (state, shape) => {
    shape.path.setAttribute("stroke", state.color);
    shape.path.setAttribute("stroke-width", state.width);
    shape.setText(Math.round(shape.value() * 100) + ' %');
  }
});
 
circleBar.animate(0.75, {
  duration: 1500
});
 
var semiBar = new ProgressBar.SemiCircle("#semi-container", {
  color: "violet",
  strokeWidth: 2,
  trailWidth: 8,
  trailColor: "black",
  easing: "bounce",
  from: { color: "#FF0099", width: 1 },
  to: { color: "#FF9900", width: 2 },
  text: {
    value: '0',
    className: 'progress-text',
    style: {
      color: 'black',
      position: 'absolute',
      top: '45%',
      left: '50%',
      padding: 0,
      margin: 0,
      transform: null
    }
  },
  step: (state, shape) => {
    shape.path.setAttribute("stroke", state.color);
    shape.path.setAttribute("stroke-width", state.width);
    shape.setText(Math.round(shape.value() * 100) + ' %');
  }
});
 
semiBar.animate(0.75, {
  duration: 2000
});

See the Pen  Basic Progress Bars - Text by Envato Tuts+ (@tutsplus)  on CodePen.

使用自定义形状创建进度条

有时,您可能希望创建具有与网站整体主题相匹配的不同形状的进度条。ProgressBar.js 允许您使用该Path()方法创建具有自定义形状的进度条。此方法的工作原理与Shape()自定义进度条动画类似,但提供的参数较少。您仍然可以为动画提供 aduration和easing值。如果要为用于绘制自定义路径的笔画的颜色和宽度设置动画,可以在from和to参数中执行此操作。

该库不提供任何方法来为自定义路径绘制轨迹,就像它为简单的直线和圆所做的那样。但是,您可以相当轻松地自己创建路径。在下面的示例中,我使用该Path()方法创建了一个三角形进度条。

在编写 javascript 代码之前,我们必须在 html 中定义我们的自定义 svg 路径。这是我用来创建一个简单三角形的代码:

<svg xmlns="https://www.w3.org/2000/svg" version="1.1" x="0" y="0" width="300" height="300" viewBox="0 0 300 300">
  <path d="M 50 50 L 200 100 L 200 300 z" fill="none" stroke="#ddd" stroke-width="1"/>
  <path id="triangle" d="M 50 50 L 200 100 L 200 300 z" fill="none" stroke="blue" stroke-width="5"/>
</svg>

您可能已经注意到我创建了两个不同的路径元素。第一条路径是浅灰色的,就像我们在上一节中看到的带有简单进度条的路径。第二条路径是我们用代码制作动画的路径。我们id在下面的 JavaScript 代码中给了它一个用于识别它的值。

var path = new ProgressBar.Path("#triangle", {
  duration: 6000,
  from: {
    color: "#ff0000",
    width: 2
  },
  to: {
    color: "#0099ff",
    width: 10
  },
  strokeWidth: 4,
  easing: "easeInOut",
  step: (state, shape) => {
    shape.path.setAttribute("stroke", state.color);
    shape.path.setAttribute("stroke-width", state.width);
  }
});
 
path.animate(1);

See the Pen  Custom Progress Bars by Envato Tuts+ (@tutsplus)  on CodePen.

在网页上使用进度条

进度条旨在向用户指示流程的进度。您可以将它们用于各种任务,例如图像上传、指示密码强度、编辑图像、处理大表等。

在本节中,我们将创建一个带有textarea元素的简单表单来输入一些文本。我们应该在里面写至少100个字符,进度条会逐渐从红色变成绿色。标记将如下所示:

<form action="" class="form-example">
    <textarea name="answer" class="answer" placeholder="Keep writing till you are at 100 characters..."></textarea>
  </form>
 
<div id="circle-container"></div>

这里没有什么特别的,只是一个简单的表格和一个div包含我们的圆形进度条的表格。

让我们首先使用以下代码创建循环进度条的实例:

const circleBar = new ProgressBar.Circle("#circle-container", {
  from: {color: "#ff0000"},
  to: {color: "#008800"},
  strokeWidth: 8,
  trailWidth: 1,
  trailColor: "#666",
  easing: "easeInOut",
  step: (state, shape) => {
    shape.path.setAttribute("stroke", state.color);
  }
});

我们使用from和to参数来指定进度条原本应该是红色,最终变成绿色。请记住,简单地设置 和 的值from不会to导致任何颜色变化。进度条颜色的变化是通过使用step我们设置stroke属性值的参数来完成的。

现在,让我们编写一些代码来将keydown事件***器附加到textarea元素。我们将获取元素内文本内容的长度,并将其除以我们希望文本内容的最小长度。在我们的例子中,我们只想数到 100 个字符。所以,我们除以 100。

最后,我们使用该animate()方法并将 的值progress与动画持续时间一起传递给它。

const textArea = document.queryselector('form textarea');
 
textArea.addeventListener('keydown', (event) => {
  let content = event.target.value;
  const min_length = 100;
   
  let progress = content.length/min_length;
   
  if(progress > 1) {
    progress = 1;
  }
   
  circleBar.animate(progress, {
    duration: 50
  });
});

这样就完成了进度条与textarea元素的集成。您可以在以下演示中使用代码:

See the Pen  Using Progress Bars on Webpages by Envato Tuts+ (@tutsplus)  on CodePen.

为了练习,您应该考虑将进度条与简单的密码检查器集成。

最后的想法

正如您在本教程中看到的,ProgressBar.js 允许您轻松创建不同类型的进度条。它还为您提供了为进度条的不同属性(如宽度和颜色)设置动画的选项。

不仅如此,您还可以使用此库更改随附文本元素的值,以便以文本形式显示进度。本教程涵盖了创建简单进度条所需了解的所有内容。但是,您可以浏览文档以了解有关该库的更多信息。


文章目录
  • 创建基本进度条
  • 使用进度条为文本值设置动画
  • 使用自定义形状创建进度条
  • 在网页上使用进度条
  • 最后的想法
  • 发表评论