封装组件库-进度条

2023, Feb 28    

实现进度条的封装

基于Element-plus框架的Progress进度条组件,封装为动画进度条。

初始配置

  • 注册路由组件progress,配置为Container组件的子路由组件
  • 采用路由懒加载,箭头函数异步引入组件。
  • 注册通用组件progress,为路由组件的子组件,以便组件间通信。
  • 将通用组件progress注册为全局组件

progress组件

  • 子组件
  //配置进度条,绑定父组件传值
  <el-progress :percentage="p" v-bind="$attrs"></el-progress>
  let props = defineProps({
      //进度条的进度
      percentage: {
          type: Number,
          default: 0
      },
      //进度条是否有动画效果
      isAnimation: {
          type: Boolean,
          default: false
      },
      //动画时长(毫秒)
      time: {
          type: Number,
          default: 3000
      }
  })
  // p计算当前的进度
  let p = ref(0)
  onMounted(()=>{
      if(props.isAnimation){
          //规定时间加载完成
          let t = Math.ceil(props.time / props.percentage)
          let timer = setInterval(()=>{
              p.value += 1
              if(p.value > props.percentage){
                  p.value = props.percentage
                  clearInterval(timer)
              }
          },t)
      }else{
          p.value = props.percentage
      }
  • 父组件
    <my-progress :percentage="60" isAnimation></my-progress>
    <br/>
    //圆形样式
    <my-progress isAnimation
    :text-inside="true"
      :stroke-width="22"
      :percentage="80"
      status="warning"
    ></my-progress>
    <br/>
    //配置样式,圆形进度条
    <div class="progress-svg-style">
      <my-progress type="circle" :percentage="80" isAnimation></my-progress>
    </div>