vue 自己封装 进度条 组件

需要实现的效果是这样的:

直接上代码:

父组件关键代码:

html:

<div class="left-bottom-bar">
        <progress-bar />
      </div>

js:

import progressBar from '@/components/ProgressBar'
export default {
  components:{
    progressBar
  },
}

css:

.left-bottom-bar{
  background: #fff;
  height: 50px;
  margin-top:10px;
  border-radius: 3px;
  display: flex;
  align-items: center;
  padding:0 40px 0 40px;
}

子组件(进度条组件)完整代码:

<style lang="less" scoped>
.progress-bar{
  width:100%;
  position: relative;
  .p-line{
    position: absolute;
    z-index: 1;
    width:100%;
    height: 10px;
    border-radius: 4px;
    background-color: #EEEEEE;
  }
  .p-done{
    position: absolute;
    z-index: 2;
    // width:80%;
    height: 10px;
    border-radius: 4px;
    background: linear-gradient(45deg, #40A9FF 25%, #1890FF 0, #1890FF 50%, #40A9FF 0, #40A9FF 75%, #1890FF 0);
    background-size: 30px 30px;
  }
  .top-num{
    margin-left:-30px;
    margin-right:-80px;
    text-align: left;
    .text-bar{
      font-size: 13px;
    }
    .text-icon{
      color:#008CDB;
      padding-left:20px;
      margin-top:-5px;
      i{
        font-size:18px;
      }
    }
  }
  .bottom-num{
    width:100%;
    padding-top:15px;
  }
}
</style>
<template>
  <div class="progress-bar">
     <div class="top-num" :style="{paddingLeft:doneWidth}">
          <div class="text-bar">药费:¥{{drugCost}}</div>
          <div class="text-icon"><i class="el-icon-caret-bottom"></i> </div>
     </div>
     <div class="p-line"></div>
     <div class="p-done" :style="{width:doneWidth}"></div>
     <div class="bottom-num">
       <div style="float:left">0</div>
       <div style="float:right">{{totalCost}}</div>
     </div>
  </div>
</template>
<script>
export default {
  data(){
    return{
      totalCost:271,
      drugCost:0,
    }
  },
  computed:{
    ratio(){
      const r = this.drugCost/this.totalCost
      return r
    },
    doneWidth(){
      return this.drugCost/this.totalCost*100 + '%'
    }
  },
  created(){},
  mounted(){
    console.log('doneStyle:',this.doneWidth)
  },
  methods:{

  }
}
</script>

完成。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用Vue组件的方式来封装一个进度条,具体实现如下: ```html <template> <div class="progress-bar"> <div class="progress" :style="{ width: percentage + '%' }"></div> </div> </template> <script> export default { name: 'ProgressBar', props: { percentage: { type: Number, required: true, default: 0 } } } </script> <style> .progress-bar { width: 100%; height: 10px; background-color: #e0e0e0; border-radius: 5px; overflow: hidden; } .progress { height: 100%; background-color: #4caf50; transition: width 0.3s ease-in-out; } </style> ``` 在上述代码中,我们定义了一个名为`ProgressBar`的Vue组件,其中包含一个`percentage`属性,表示进度条的进度百分比。该组件使用CSS样式实现进度条的效果,具体实现如下: - `.progress-bar`:表示进度条的外层容器,包含背景色和边框样式。 - `.progress`:表示进度条的进度部分,包含进度条颜色和过渡效果。 在组件的模板中,我们使用`percentage`属性来计算进度条的宽度,并将其绑定到`.progress`样式的`width`属性上。这样,当`percentage`值发生变化时,进度条的宽度也会发生相应的变化。 使用该进度组件的方式如下: ```html <template> <div> <progress-bar :percentage="progress"></progress-bar> <button @click="increaseProgress">增加进度</button> </div> </template> <script> import ProgressBar from './ProgressBar.vue' export default { name: 'App', components: { ProgressBar }, data() { return { progress: 50 } }, methods: { increaseProgress() { this.progress += 10 } } } </script> ``` 在上述代码中,我们在父组件中引入了`ProgressBar`组件,并将`progress`属性绑定到子组件的`percentage`属性上。同时,在父组件中定义了一个按钮,点击按钮可以增加进度条的进度。 这样,我们就可以通过Vue组件封装一个进度条,并在其他组件中方便地重复使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值