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.

134 lines
2.6 KiB

// miniprogram_npm/lin-ui/circle/index.js
Component({
/**
* 组件的属性列表
*/
externalClasses: ['l-value-class'],
properties: {
percent: {
type: Number,
value: 0
},
outerDiameter: {
type: Number,
value: 220
},
innerDiameter: {
type: Number,
value: 170
},
activeColor: {
type: String
},
backgroundColor: {
type: String,
value: '#EBEBEB',
},
innerColor: {
type: String,
value: '#FFFFFF',
},
active: {
type: Boolean,
value: false
},
duration: {
type: Number,
value: 30
},
showValue: {
type: Boolean,
value: false
},
valueColor: {
type: String,
},
valueSize: {
type: Number,
value: 25
}
},
options: {
multipleSlots: true,
pureDataPattern: /^_/ // 指定所有 _ 开头的数据字段为纯数据字段
},
/**
* 组件的初始数据
*/
data: {
displayPercent: 0,
},
observers: {
'percent': async function (percent) {
if (percent > 100) {
this.setData({
percent: 100
});
return;
}
if (percent < 0) {
this.setData({
percent: 0
});
return;
}
if (this.data.active) {
let displayPercent = this.data.displayPercent;
if (displayPercent < percent) {
while (displayPercent < percent) {
await this.sleep(this.data.duration);
displayPercent += 1;
this.setData({
displayPercent: displayPercent
});
}
} else if (displayPercent > percent) {
while (displayPercent > percent) {
await this.sleep(this.data.duration);
displayPercent -= 1;
this.setData({
displayPercent
});
}
}
} else {
this.setData({
displayPercent: percent
});
}
},
'outerDiameter': function (outerDiameter) {
if (outerDiameter < this.data.innerDiameter) {
outerDiameter = this.data.innerDiameter;
this.setData({
outerDiameter
});
}
},
'innerDiameter': function (innerDiameter) {
if (innerDiameter < 0) {
this.setData({
innerDiameter: 0
});
}
}
},
/**
* 组件的方法列表
*/
methods: {
sleep(milSec) {
return new Promise(resolve => {
setTimeout(resolve, milSec);
});
}
}
});