vant-fork
Version:
Lightweight Mobile UI Components built on Vue
91 lines (88 loc) • 2.1 kB
JavaScript
import create from '../utils/create';
export default create({
render: function render() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _c('div', {
class: _vm.b()
}, [_c('span', {
class: _vm.b('portion', {
'with-pivot': _vm.showPivot && _vm.text
}),
style: _vm.portionStyle
}, [_vm.showPivot && _vm.text ? _c('span', {
ref: "pivot",
class: _vm.b('pivot'),
style: _vm.pivotStyle
}, [_vm._v(_vm._s(_vm.text))]) : _vm._e()])]);
},
name: 'progress',
props: {
inactive: Boolean,
pivotText: String,
pivotColor: String,
percentage: {
type: Number,
required: true,
validator: function validator(value) {
return value >= 0 && value <= 100;
}
},
showPivot: {
type: Boolean,
default: true
},
color: {
type: String,
default: '#38f'
},
textColor: {
type: String,
default: '#fff'
}
},
data: function data() {
return {
pivotWidth: 0,
progressWidth: 0
};
},
computed: {
text: function text() {
return this.isDef(this.pivotText) ? this.pivotText : this.percentage + '%';
},
currentColor: function currentColor() {
return this.inactive ? '#cacaca' : this.color;
},
pivotStyle: function pivotStyle() {
return {
color: this.textColor,
background: this.pivotColor || this.currentColor
};
},
portionStyle: function portionStyle() {
return {
width: (this.progressWidth - this.pivotWidth) * this.percentage / 100 + 'px',
background: this.currentColor
};
}
},
mounted: function mounted() {
this.getWidth();
},
watch: {
showPivot: function showPivot() {
this.getWidth();
},
pivotText: function pivotText() {
this.getWidth();
}
},
methods: {
getWidth: function getWidth() {
this.progressWidth = this.$el.offsetWidth;
this.pivotWidth = this.$refs.pivot ? this.$refs.pivot.offsetWidth : 0;
}
}
});