vue3中进度条上加高亮圆点

实现效果

在这里插入图片描述

小圆点基于进度条定位(left)。

实现代码

<template>
	<!-- 
       这块代码实现的功能:
       progressData遍历的年份进度数组,展示每年完成的进度
   -->
    <ul>
        <li v-for="(item, index) in progressData" :key="item.year">
            <el-row :gutter="10">
              <el-col :span="21" class="progress-info-left"><span>{{ index + 1 }}</span>年完成进度</el-col>
              <el-col :span="3" style="text-align: right;">{{ handleNum(item.percentage) }}%</el-col>
            </el-row>
            <el-row>
              <el-col :span="24">
                <el-progress
                ref="progressRefs"
                :text-inside="true"
                :percentage="Number(item.percentage)"
              >
               <div class="progress-dot" :style="{ left: `${calculateDotPosition(index, item.percentage)}px` }"></div> 
              </el-progress>
              </el-col>
            </el-row>
        </li>
   </ul>
</template>

<script setup>
const progressWidths = ref([]); 

// index为当前年度索引
// percentage当前年度完成值
const calculateDotPosition = (index, percentage) => {
  // 非空判断
  if(percentage) {
    // progressRefs所有进度DOM
    progressRefs.value.forEach((ref, index) => {  
      if (ref) {
        // 当前进度条元素的布局宽度(包括padding和border,但不包括margin)
        progressWidths.value[index] = ref.$el.offsetWidth;  
      }  
    });

    if (progressWidths.value[index] > 0) {  
      // 计算点的位置。
      // 通过将元素的宽度乘以百分值(转换为数字),然后除以100获取百分比。
      // 结果减去4(这块为小圆点的半径),使其居中。
      return (progressWidths.value[index] * Number(percentage) / 100) - 4;  
    } 
  } else {
    return 0;  
  }
}
</script>

<style>
// 进度条
.el-progress {  
   position: relative; 
}
:deep(.el-progress-bar__outer) {
   overflow: visible;
}
        
.progress-dot {  
    position: absolute;  
    top: -1px; 
    width: 8px; 
    height: 8px;  
    background-color: #fff; 
    box-shadow: 0px 0px 7px 0 #98EEFF;
    border-radius: 50%;  
 }        
</style>

如果用的地方多的,可将其抽离为一个公共组件。

相关推荐

  1. vue3学习——路由进度

    2024-06-10 07:22:09       28 阅读
  2. Vue.js 3.0】NProgress 进度

    2024-06-10 07:22:09       16 阅读
  3. 使用vue3+ts封装仪表盘形进度

    2024-06-10 07:22:09       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 07:22:09       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 07:22:09       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 07:22:09       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-10 07:22:09       20 阅读

热门阅读

  1. 使用 AES 算法在 C# 中实现安全字符串加密和解密

    2024-06-10 07:22:09       12 阅读
  2. 使用Spring Cloud设计电商系统架构

    2024-06-10 07:22:09       10 阅读
  3. Spring RestClient报错:400 Bad Request : [no body]

    2024-06-10 07:22:09       11 阅读
  4. 临近空间飞艇技术

    2024-06-10 07:22:09       8 阅读
  5. IO流(字符流)

    2024-06-10 07:22:09       8 阅读
  6. Web前端炒作:揭秘行业现象,探索真实价值

    2024-06-10 07:22:09       7 阅读