当前位置:首页 > VUE

vue实现进度条

2026-01-21 03:31:03VUE

Vue 实现进度条的方法

使用原生 HTML 和 CSS 结合 Vue 数据绑定

创建一个简单的进度条,通过 Vue 的数据绑定动态控制进度值。

<template>
  <div class="progress-container">
    <div class="progress-bar" :style="{ width: progress + '%' }"></div>
  </div>
  <button @click="increaseProgress">增加进度</button>
</template>

<script>
export default {
  data() {
    return {
      progress: 0
    }
  },
  methods: {
    increaseProgress() {
      if (this.progress < 100) {
        this.progress += 10
      }
    }
  }
}
</script>

<style>
.progress-container {
  width: 100%;
  height: 20px;
  background-color: #e0e0e0;
  border-radius: 10px;
  overflow: hidden;
}

.progress-bar {
  height: 100%;
  background-color: #42b983;
  transition: width 0.3s ease;
}
</style>

使用第三方组件库

Vue 生态中有许多现成的 UI 组件库提供了进度条组件,例如 Element UI、Vuetify 等。

以 Element UI 为例:

<template>
  <el-progress :percentage="progress"></el-progress>
  <el-button @click="increaseProgress">增加进度</el-button>
</template>

<script>
export default {
  data() {
    return {
      progress: 0
    }
  },
  methods: {
    increaseProgress() {
      if (this.progress < 100) {
        this.progress += 10
      }
    }
  }
}
</script>

实现环形进度条

通过 SVG 和 Vue 结合,可以创建环形进度条。

<template>
  <div class="circular-progress">
    <svg viewBox="0 0 36 36">
      <path
        d="M18 2.0845
          a 15.9155 15.9155 0 0 1 0 31.831
          a 15.9155 15.9155 0 0 1 0 -31.831"
        fill="none"
        stroke="#e0e0e0"
        stroke-width="2"
      />
      <path
        d="M18 2.0845
          a 15.9155 15.9155 0 0 1 0 31.831
          a 15.9155 15.9155 0 0 1 0 -31.831"
        fill="none"
        stroke="#42b983"
        stroke-width="2"
        :stroke-dasharray="`${progress}, 100`"
      />
    </svg>
    <span>{{ progress }}%</span>
  </div>
  <button @click="increaseProgress">增加进度</button>
</template>

<script>
export default {
  data() {
    return {
      progress: 0
    }
  },
  methods: {
    increaseProgress() {
      if (this.progress < 100) {
        this.progress += 10
      }
    }
  }
}
</script>

<style>
.circular-progress {
  position: relative;
  width: 100px;
  height: 100px;
}

.circular-progress svg {
  width: 100%;
  height: 100%;
}

.circular-progress span {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 16px;
}
</style>

动画效果增强

为进度条添加平滑的动画效果,提升用户体验。

<template>
  <div class="progress-container">
    <div class="progress-bar" :style="{ width: animatedProgress + '%' }"></div>
  </div>
  <input type="range" v-model="progress" min="0" max="100">
</template>

<script>
export default {
  data() {
    return {
      progress: 0,
      animatedProgress: 0
    }
  },
  watch: {
    progress(newVal) {
      const animate = () => {
        if (this.animatedProgress < newVal) {
          this.animatedProgress += 1
          requestAnimationFrame(animate)
        } else if (this.animatedProgress > newVal) {
          this.animatedProgress -= 1
          requestAnimationFrame(animate)
        }
      }
      animate()
    }
  }
}
</script>

这些方法提供了从简单到复杂的进度条实现方案,可以根据项目需求选择合适的方式。

vue实现进度条

标签: 进度条vue
分享给朋友:

相关文章

vue实现tab切换

vue实现tab切换

Vue实现Tab切换的方法 使用v-if和v-show指令 通过v-if或v-show控制不同tab内容的显示与隐藏。v-if会销毁和重建DOM,适合切换频率低的场景;v-show仅切换CSS的dis…

vue实现购物按钮

vue实现购物按钮

Vue 购物按钮实现方法 基础按钮实现 使用 Vue 的模板语法创建基础按钮组件,绑定点击事件处理购物逻辑: <template> <button @click="addToC…

vue实现表格多行修改

vue实现表格多行修改

实现多行编辑表格 在Vue中实现表格的多行编辑功能,可以通过以下方法完成。这里以Element UI的表格组件为例,但思路适用于其他UI库或原生实现。 数据准备 定义表格数据和编辑状态管理变量:…

vue实现本地数据存储

vue实现本地数据存储

使用 localStorage 或 sessionStorage Vue 中可以直接调用浏览器提供的 localStorage 或 sessionStorage API 进行数据存储。localSto…

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要…