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:{
      width:{
        type: null,
        default: ""
      },
      Cardheight:{
        type: Number,
        default: 400
      },
      Cardwidth:{
        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

原文地址:https://www.cnblogs.com/tangwei89/p/11741941.html

时间: 2024-11-09 12:03:18

VUE 超好看气泡进度条组件的相关文章

手把手教你实现一个 Vue 进度条组件!

最近在个人的项目中,想对页面之间跳转的过程进行优化,想到了很多文档或 npm 等都用到的页面跳转进度条,于是便想自己去实现一个,特此记录. 来看下 npm 搜索组件时候的效果: so 下面咱们一起动手实现一下呗.  定义使用方式  想实现一个组件的前提,一定要想好你的需求是什么,还要自己去定义一个舒服的使用方法,这其中也是有原则的,对使用者来说,使用方式越简单越好.那么对应的代价就是写这个组件的复杂度会变高. 我想要的使用方式是这样的:可以在任意的地方去调用到这个方法,可以随时控制其状态.  看

Android学习笔记(24):进度条组件ProgressBar及其子类

ProgressBar作为进度条组件使用,它还派生了SeekBar(拖动条)和RatingBar(星级评分条). ProgressBar支持的XML属性: Attribute Name Related Method Description style 设置ProgressBar指定风格 android:indeterminate 设置为true时,进度条不显示运行进度 android:indeterminateBehavior indeterminate模式下.当进度条达到最大值时的动画处理行为

[ExtJs5.1.0-第3天] 进度条组件介绍

进度条组件介绍 1.认识Ext.Progress BarExt.ProgressBar是一个可更新的进度条组件,继承自Ext.Component,该进度条具有2种不同的模式: 手工模式 和 自动模式.在手工模式中程序员要自己控制进度条的显示.更新.清楚:在自动模式中只需调用wait方法,进度条就会自动无限制地滚动下去,它适合为那些长时间的同步操作进行提示. 下表给出所有组件都有的公共属性和方法 配置项 类型 说明 renderTo String 指定一个页面上已经存在的元素或元素id,该元素将会

android之实现ProgressBar进度条组件

android之实现ProgressBar进度条组件: (注意:横向那个进度条要android4.0以上版本支持,也就是最低(android:minSdkVersion="14")支持) 布局:layout/activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.a

学习EXTJS6(5)基本功能-进度条组件

Ext.ProgressBar有二种模式:手动和自动:手动:自己控制显示.进度.更新.清除.自动只需要调用Wait方法即可. 配置项:   配置项 类型 说明 renderTo String 指定页面上已经存在的元素or元素id,该元素成为新组件的容器 height Number   width Bunber   cls String 一个可选的样式表扩展常用于自定义式样.默认是空 <!DOCTYPE html> <html> <head> <meta http-

progressBar(进度条)组件

一.class加载方式 <div id="pos" class="easyui-progressbar" data-options="value:60" style="width: 200px;"></div> 二.js加载方式 $("#pos").progressbar({ //属性 width:600,//设置进度条宽度.默认为 auto,值为string height:30,/

android之进度条组件ProgressBar

首先是main.xml文件 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="fill_parent" androi

c# 异步进度条组件BackgroundWorker

//控件事件调用DoWork()方法就行. #region 进度条 private BackgroundWorker worker = null; private void DoWork(string outfile) { //显示进度条 ProgressForm progressForm = new ProgressForm(); progressForm.TopMost = true; progressForm.Show(this); //准备进度条的记数 worker = new Back

Vue 实现loading进度条

项目中遇到的,用vue实现下: 1 <template> 2 <div class="plLoading"> 3 <div class="plLoadingContent"> 4 <div class="plLoadingLogo"> 5 <img src="http://static.crecgec.com/Kaipiao/loadingLogo.png"/> 6