zoukankan      html  css  js  c++  java
  • VUE 超好看气泡进度条组件

    超好看的气泡进度条, 已封装成组件. 二话不说先上图

    ↓↓↓

     

    一, 先将这张图片放入 assets 文件夹内 (因为是透明背景图片,所以用箭头框起来了)

    ↓↓↓

    ↑↑↑

     

    二, 在 components 文件夹内新建一个 progress-bar.vue 文件 Copy 下面这段代码进去

    <template>
      <div class="template-view">
          <div class="progressbar-card">
          <div class="progressbar" :style="{'width':Cardwidth+'%','height':Cardheight+'px'}">
            <div class="before"></div>
            <div :class="bartusecolor[ColorIndex]" :style="{'width':width+'%','transition':'width'+' '+time+'s'}">
              <span></span>
            </div>
            <div class="label-flex">
              <div class="label la-top">
                <div :class="barardcolor[ColorIndex]">
                  <span></span>
                </div>
                <span class="traffic-info">{{title}}</span>
                <code class="card-tag tag-red">{{rightSize}}</code>
              </div>
            </div>
          </div>
        </div>
        </div>
    </template>
    
    <script>
    export default {
        data(){
            return{
                bartusecolor:['bar tuse color','bar tuse color2','bar tuse color3','bar tuse color4'],
                barardcolor:['bar ard color','bar ard color2','bar ard color3','bar ard color4'],
            }
        },
        props:{
          {
            type: null,
            default: ""
          },
          Cardheight:{
            type: Number,
            default: 400
          },
          Card{
            type: Number,
            default: 20
          },
          title:{
            type: String,
            default: ""
          },
          rightSize:{
            type: null,
            default: ""
          },
          ColorIndex:{
            type: Number,
            default: 0
          },
          time:{
            type: Number,
            default: 5
          }
        }
    };
    </script>
    
    <style scoped>
    @keyframes sparkle {
      0%{
                transform: translateY(5px);
          opacity: .5;
      }
      10%{
                transform: translateY(-10px);
          opacity: 1;
      }
      20%{
                transform: translateY(-20px);
          opacity: .5;
      }
      30%{
                transform: translateY(-30px);
          opacity: 1;
      }
      40%{
                transform: translateY(-40px);
          opacity: .5;
      }
      50%{
                transform: translateY(-50px);
          opacity: 1;
      }
      60%{
          transform: translateY(-60px);
          opacity: .6;
      }
      70%{
                transform: translateY(-70px);
          opacity: 1;
      }
      80%{
                transform: translateY(-80px);
          opacity: .4;
      }
      90%{
                transform: translateY(-90px);
          opacity: 1;
      }
      100%{
                transform: translateY(-100px);
          opacity: .52;
      }
    }
    .progressbar .bar span {
      position: absolute;
      display: block;
      width: 100%;
      height: 108px;
      -webkit-border-radius: 16px;
      border-radius: 16px;
      top: 0px;
      left: 0;
      background: url(../assets/trafficbar.png) 0 0;
      /* -webkit-animation: sparkle 1500ms linear infinite;
      -moz-animation: sparkle 1500ms linear infinite;
      -o-animation: sparkle 1500ms linear infinite; */
      animation: sparkle 1500ms linear infinite;
      opacity: 0.4;
    }
    .progressbar {
      position: relative;
      display: block;
      border-bottom: 1px solid rgba(255, 255, 255, 0.25);
      border-radius: 16px;
      margin: 0px auto;
    }
    .progressbar:first-of-type {
      margin-top: 40px;
    }
    .progressbar .before {
      position: absolute;
      display: block;
      content: "";
      width: calc(100% + 4px);
      height: 20px;
      left: -2px;
      right: 1px;
      border-radius: 20px;
      background: #fff;
      box-shadow: 0 0 2px 0 rgba(180, 180, 180, 0.85);
      border: 1px solid rgba(222, 222, 222, 0.8);
    }
    .progressbar .bar {
      position: absolute;
      display: block;
      width: 0;
      height: 16px;
      top: 2px;
      left: 0;
      background: #7eea19;
      border-radius: 16px;
      box-shadow: 0 0 12px 0 #7eea19, inset 0 1px 0 0 rgba(255, 255, 255, 0.45),
        inset 1px 0 0 0 rgba(255, 255, 255, 0.25),
        inset -1px 0 0 0 rgba(255, 255, 255, 0.25);
      overflow: hidden;
    }
    .progressbar .label .bar {
      position: relative;
      display: inline-block;
      top: 12%;
      left: 0;
      margin-right: 5px;
      width: 16px;
    }
    .progressbar .label .bar.color {
      box-shadow: 0 0 5px 0 #7eea19, inset 0 1px 0 0 rgba(255, 255, 255, 0.45),
        inset 1px 0 0 0 rgba(255, 255, 255, 0.25),
        inset -1px 0 0 0 rgba(255, 255, 255, 0.25);
    }
    .progressbar .label .bar.color2 {
      box-shadow: 0 0 5px 0 #e5c319, inset 0 1px 0 0 rgba(255, 255, 255, 0.45),
        inset 1px 0 0 0 rgba(255, 255, 255, 0.25),
        inset -1px 0 0 0 rgba(255, 255, 255, 0.25);
    }
    .progressbar .label .bar.color3 {
      box-shadow: 0 0 5px 0 #e81957, inset 0 1px 0 0 rgba(255, 255, 255, 0.45),
        inset 1px 0 0 0 rgba(255, 255, 255, 0.25),
        inset -1px 0 0 0 rgba(255, 255, 255, 0.25);
    }
    .progressbar .label .bar.color4 {
      box-shadow: 0 0 5px 0 #186de2, inset 0 1px 0 0 rgba(255, 255, 255, 0.45),
        inset 1px 0 0 0 rgba(255, 255, 255, 0.25),
        inset -1px 0 0 0 rgba(255, 255, 255, 0.25);
    }
    .progressbar .bar.color2 {
      background: #e5c319;
      box-shadow: 0 0 12px 0 #e5c319, inset 0 1px 0 0 rgba(255, 255, 255, 0.45),
        inset 1px 0 0 0 rgba(255, 255, 255, 0.25),
        inset -1px 0 0 0 rgba(255, 255, 255, 0.25);
    }
    .progressbar .bar.color3 {
      background: #ff6895;
      box-shadow: 0 0 7px 0 #e81957, 0 1px 0 0 rgba(255, 255, 255, 0.45),
        1px 0 0 0 rgba(255, 255, 255, 0.25), -1px 0 0 0 rgba(255, 255, 255, 0.25);
    }
    .progressbar .bar.color4 {
      background: #186de2;
      box-shadow: 0 0 12px 0 #186de2, inset 0 1px 0 0 rgba(255, 255, 255, 0.45),
        inset 1px 0 0 0 rgba(255, 255, 255, 0.25),
        inset -1px 0 0 0 rgba(255, 255, 255, 0.25);
    }
    .progressbar .bar:before {
      position: absolute;
      display: block;
      content: "";
      width: 606px;
      height: 150%;
      top: -25%;
      left: -25px;
    }
    .progressbar .bar:after {
      position: absolute;
      display: block;
      content: "";
      width: 64px;
      height: 16px;
      right: 0;
      top: 0;
      border-radius: 0 16px 16px 0;
    }
    
    .label.la-top code,
    .progressbar .label {
      display: flex;
      align-items: center;
    }
    .progressbar .label {
      font-family: aldrich, sans-serif;
      position: relative;
      width: 100%;
      height: 30px;
      line-height: 30px;
      bottom: 40px;
      left: 0;
      background: #fff;
      font-weight: 700;
      font-size: 12px;
      color: #515a6e;
    }
    .label.la-top code {
      position: absolute;
      right: 0;
      top: 6px;
    }
    .traffic-info {
      margin-top: 6px;
    }
    
    .progressbar-card {
      background: #fff;
      display: flex;
      align-items: center;
    }
    
    </style>

    三, 这时候我们就可以在页面直接引用 progress-bar.vue 组件啦

    ↓↓↓ 使用 ↓↓↓

    <ProgressBar 
          :Cardwidth="90" 
          :Cardheight="30" 
          :width="progre" 
          :title='title' 
          :rightSize='rightSize' 
          :ColorIndex="2">
    </ProgressBar>
    <script>
    import ProgressBar from '@/components/progress-bar'
      export default {
        components:{
          ProgressBar
        },
        data(){
            return{
                title:'今日消耗流量',
                rightSize:'8GB',
                progre:0,
            }
            
        }
    }
    </script>

    四, 参数配置

    :Cardwidth
    Number
    进度条组件所在容器内占比宽,默认90 (90%)
    :Cardheight
    Number 进度条组件高度,默认20
    :width Number 进度数组 1-100
    :title
    String
    主标题
    :rightSize - 付数据
    :ColorIndex
    Number
    颜色 0:粉红/1:橙色/2:浅绿/3:蓝色
    :time
    Number
    进度条变化动画时间

    创作不易,转载请注明出处 https://www.cnblogs.com/tangwei89/p/11741941.html

  • 相关阅读:
    323. Number of Connected Components in an Undirected Graph
    418. Sentence Screen Fitting
    417. Pacific Atlantic Water Flow
    416. Partition Equal Subset Sum
    415. Add Strings
    245. Shortest Word Distance III
    [AHOI2009]维护序列
    [洛谷P1439]排列LCS问题
    [Vijos P1369]难解的问题
    [codevs3657]括号序列
  • 原文地址:https://www.cnblogs.com/tangwei89/p/11741941.html
Copyright © 2011-2022 走看看