evolve-js
Version:
EvolveJS An Elements framework built over CreateJS
85 lines (73 loc) • 2.06 kB
JavaScript
import {Element} from '../Elements';
import Anim from '../Anim';
import Component from './Component';
export default class ProgressBar extends Component {
setProgress(percentage) {
return new Promise((resolve) => {
Anim.Tween.get(this.progress).to({
x: this.progressStartX + (this.progressBounds.width * percentage),
}, 250).call(() => {
resolve();
});
});
}
initDefaults(defaults) {
super.initDefaults({
fill: '#fff',
padding: [10, 10],
stroke: {
size: 4,
color: '#000',
radius: 50,
},
size: {
width: 150,
height: 50,
},
}.inherit(defaults));
}
initSettings(options) {
const parsedOptions = options;
if (Number.isNumber(parsedOptions.padding)) {
parsedOptions.padding = [parsedOptions.padding, parsedOptions.padding];
}
super.initSettings(parsedOptions);
}
drawElements() {
super.drawElements();
this.progressBounds = {
width: this.getComputedBounds().width - this.settings.padding[0],
height: this.getComputedBounds().height - this.settings.padding[1],
};
this.progressMask = new Element({
fill: '#000',
stroke: {
size: 0,
radius: this.settings.stroke.radius,
},
size: this.progressBounds,
}).children.first().inherit({
x: this.progressMask.x + this.settings.padding[0] / 2,
y: this.progressMask.y + this.settings.padding[1] / 2,
});
this.progress = new Element({
parent: this,
fill: {
colors: ['rgb(254, 127, 200)', 'rgb(171, 27, 190)'],
ratios: [0, 1],
points: [0, 15, 0, 45],
},
stroke: {
size: 0,
radius: this.settings.stroke.radius,
},
mask: this.progressMask,
size: this.progressBounds,
align: 'center middle',
}).setPosition({
x: -this.progressBounds.width,
});
this.progressStartX = this.progress.getComputedBounds().x;
this.progress.cache(...this.progress.bounds);
}
}