You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.5 KiB
147 lines
3.5 KiB
<template> |
|
<view class="u-progress" :style="{ |
|
borderRadius: round ? '100rpx' : 0, |
|
height: height + 'rpx', |
|
backgroundColor: inactiveColor |
|
}"> |
|
<view :class="[ |
|
type ? `u-type-${type}-bg` : '', |
|
striped ? 'u-striped' : '', |
|
striped && stripedActive ? 'u-striped-active' : '' |
|
]" class="u-active" :style="[progressStyle]"> |
|
<slot v-if="$slots.default || $slots.$default" /> |
|
<block v-else-if="showPercent"> |
|
{{percent + '%'}} |
|
</block> |
|
</view> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
/** |
|
* lineProgress 线型进度条 |
|
* @description 展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。 |
|
* @tutorial https://www.uviewui.com/components/lineProgress.html |
|
* @property {String Number} percent 进度条百分比值,为数值类型,0-100 |
|
* @property {Boolean} round 进度条两端是否为半圆(默认true) |
|
* @property {String} type 如设置,active-color值将会失效 |
|
* @property {String} active-color 进度条激活部分的颜色(默认#19be6b) |
|
* @property {String} inactive-color 进度条的底色(默认#ececec) |
|
* @property {Boolean} show-percent 是否在进度条内部显示当前的百分比值数值(默认true) |
|
* @property {String Number} height 进度条的高度,单位rpx(默认28) |
|
* @property {Boolean} striped 是否显示进度条激活部分的条纹(默认false) |
|
* @property {Boolean} striped-active 条纹是否具有动态效果(默认false) |
|
* @example <u-line-progress :percent="70" :show-percent="true"></u-line-progress> |
|
*/ |
|
export default { |
|
name: "u-line-progress", |
|
props: { |
|
// 两端是否显示半圆形 |
|
round: { |
|
type: Boolean, |
|
default: true |
|
}, |
|
// 主题颜色 |
|
type: { |
|
type: String, |
|
default: '' |
|
}, |
|
// 激活部分的颜色 |
|
activeColor: { |
|
type: String, |
|
default: '#19be6b' |
|
}, |
|
inactiveColor: { |
|
type: String, |
|
default: '#ececec' |
|
}, |
|
// 进度百分比,数值 |
|
percent: { |
|
type: Number, |
|
default: 0 |
|
}, |
|
// 是否在进度条内部显示百分比的值 |
|
showPercent: { |
|
type: Boolean, |
|
default: true |
|
}, |
|
// 进度条的高度,单位rpx |
|
height: { |
|
type: [Number, String], |
|
default: 28 |
|
}, |
|
// 是否显示条纹 |
|
striped: { |
|
type: Boolean, |
|
default: false |
|
}, |
|
// 条纹是否显示活动状态 |
|
stripedActive: { |
|
type: Boolean, |
|
default: false |
|
} |
|
}, |
|
data() { |
|
return { |
|
|
|
} |
|
}, |
|
computed: { |
|
progressStyle() { |
|
let style = {}; |
|
style.width = this.percent + '%'; |
|
if(this.activeColor) style.backgroundColor = this.activeColor; |
|
return style; |
|
} |
|
}, |
|
methods: { |
|
|
|
} |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
@import "../../libs/css/style.components.scss"; |
|
|
|
.u-progress { |
|
overflow: hidden; |
|
height: 15px; |
|
/* #ifndef APP-NVUE */ |
|
display: inline-flex; |
|
/* #endif */ |
|
align-items: center; |
|
width: 100%; |
|
border-radius: 100rpx; |
|
} |
|
|
|
.u-active { |
|
width: 0; |
|
height: 100%; |
|
align-items: center; |
|
@include vue-flex; |
|
justify-items: flex-end; |
|
justify-content: space-around; |
|
font-size: 20rpx; |
|
color: #ffffff; |
|
transition: all 0.4s ease; |
|
} |
|
|
|
.u-striped { |
|
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); |
|
background-size: 39px 39px; |
|
} |
|
|
|
.u-striped-active { |
|
animation: progress-stripes 2s linear infinite; |
|
} |
|
|
|
@keyframes progress-stripes { |
|
0% { |
|
background-position: 0 0; |
|
} |
|
|
|
100% { |
|
background-position: 39px 0; |
|
} |
|
} |
|
</style>
|
|
|