美文网首页
vue圆形进度条

vue圆形进度条

作者: 給我小鱼干 | 来源:发表于2019-05-09 18:05 被阅读0次
      
    <template>
      <div class="circle-chart">
        <div class="donut-chart">
          <div id="section1" class="clip">
            <div class="item"></div>
          </div>
          <div id="section2" class="clip">
            <div class="item"></div>
          </div>
          <div id="section3" ref="section3" class="clip">
            <div class="item" ref="section3Item"></div>
          </div>
          <div class="center"><a><span class="percent" ref="percent">0</span><small>%</small></a></div>
        </div>
      </div>
    </template>
    
    <script>
    export default {
      props: {
        progress:{
          type:Number,
          default:0
        }
      },
      data() {
        return {
        }
      },
      watch: {
        progress(val){
          if(val<=100){
            this.updateDonut(val)
          }
        }
      },  
      beforeDestroy() {
        // 清除旧组件的样式标签
      },
      methods: {
        updateDonut (percent) {
          // 圆形进度
          let offset = 0
          let $el = this.$refs.section3
          let $elItem = this.$refs.section3Item
          let $txt = this.$refs.percent
          if (percent < 50) {
            offset = (360 / 100) * percent
            $el.style.webkitTransform = $el.style.msTransform = $el.style.MozTransform = 'rotate(' + offset + 'deg)'
            $elItem.style.webkitTransform = $elItem.style.msTransform = $elItem.style.MozTransform = 'rotate(' + (180 - offset) + 'deg)'
            $elItem.style.backgroundColor = '#e3e3e3'
          } else {
            offset = ((360 / 100) * percent) - 180
            $el.style.webkitTransform = $elItem.style.msTransform = $el.style.MozTransform = 'rotate(180deg)'
            $elItem.style.webkitTransform = $elItem.style.msTransform = $elItem.style.MozTransform = 'rotate(' + offset + 'deg)'
            $elItem.style.backgroundColor = '#FF9300'
          }
          $txt.innerHTML = percent
        }
      },
      mounted() {
        this.updateDonut(0)
      },
    }
    </script>
    <style lang="scss" scoped>
    .circle-chart {
        .donut-chart {
          position: relative;
          width: 70px;
          height: 70px;
          border-radius: 100%
        }
        .donut-chart .center {
          background: #fff;
          border-radius: 50%;
          width: 70%;
          height: 70%;
          left: 15%;
          top: 15%;
          position: absolute;
          a {
            color: #000;
            display: block;
            font-size: 13px;
            font-weight: 700;
            left: 50%;
            position: absolute;
            top: 50%;
            transform: translate(-50%,-50%);
            small {
              font-size: 14px;
            }
          }
        }
        .clip {
          border-radius: 50%;
          clip: rect(0px 70px 70px 35px);
          height: 100%;
          position: absolute;
          width: 100%;
        }  
        .item {
          border-radius: 50%;
          clip: rect(0px 35px 70px 0px);
          height: 100%;
          position: absolute;
          width: 100%;
        } 
        #section1 {
          transform: rotate(0deg);
        }
        #section1 .item {
          background-color: #FF9300;
          transform: rotate(180deg);
        }
        #section2 {
          transform: rotate(180deg);
        } 
        #section2 .item {
          background-color: #e3e3e3;
          transform: rotate(180deg);
        }
    }
    </style>
    
    

    相关文章

      网友评论

          本文标题:vue圆形进度条

          本文链接:https://www.haomeiwen.com/subject/lisgoqtx.html