| New file |
| | |
| | | <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> |