如何写一个基于Vue3+TS的进度条1 | 青训营笔记

314 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第1天。由于之前忙于项目开发,没有及时进行笔记整理。目前项目开发告一段落,故开始整理一下在本次青训营中的收获。本次参加的是前端组件库项目,我在其中负责Progress进度条组件和Upload上传组件的开发,本篇笔记主要分享一下Progress的开发记录。

线形进度条

这是最基本的进度条样式。用于展示用户操作进度,比如下载文件的进度、上传文件的进度、视频播放的进度等等,告知用户当前的状态和预期,展示任务的进度。

在本次开发中,我首先是创建了一个新的 Vue 单文件组件progress.vue,刚开始定义的参数有颜色、百分比和图标,使用了一个容器和一个具有动态宽度的内部进度条,并将进度条的宽度绑定到组件的 percent 属性上。由于后面还要写其他的功能,故将这个模块用v-if封装。图标可以直接采用本项目中已经封装好的icon图标。如果进度条达到100%,则会在进度条末端显示“满”字。接着编写TS代码,定义组件的属性和状态。

<div class="line" v-else>
      <div class="colorLine" :style="'background:' + props.color + ';width:' + props.percent + '%'"></div>
    </div>
    <div class="status" v-if="status">
      <tass-icon name="warning" v-if="status=='warning'"></tass-icon>
      <tass-icon name="success" v-if="status=='success'"></tass-icon>
    </div>
    <div class="percent" v-else-if="percent==100"></div>
    <div class="percent" v-else-if="props.type!='in'">
      {{ props.percent }}%
    </div>

百分比内显

完成最基础的线形进度条之后,我又参照element-ui组件库写了百分比内显功能。加了一个type参数用来选择是线形模式还是百分比内显模式。可以看出这两种模式只需要更改数字和进度条的位置即可。

<div class="tas-progress" v-if="props.select=='on'">
    <div class="line" v-if="props.type=='in'">
      <div class="colorLine" :style="'background:' + props.color + ';height:26px;text-align:right;line-height:26px;width:' + props.percent + '%'">
        {{ props.percent }}%
      </div>
    </div>

之后我们就可以在App.vue中使用组件了,如下所示:

<div style="width: 640px; padding: 20px 0">
    <tass-progress color="#67c23a" :percent="100" select="on"></tass-progress>
    <tass-progress color="#F0E68C" :percent="80" status="warning" select="on"></tass-progress>
    <tass-progress :percent="40" status="success" select="on"></tass-progress>
  </div>

  <div style="width: 640px; padding: 20px 0">
    <tass-progress color="#e6a23c" :percent="60" select="on" type="in"></tass-progress>
  </div>

在下一篇笔记中,我将介绍环形进度条的开发过程。