@ngx-extensions/count-up.js
Version:
Wrapper module for countup.js
139 lines • 14.3 kB
JavaScript
import { Directive, Input, ElementRef, HostListener, Output, EventEmitter } from '@angular/core';
import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
import * as CountUp from 'countup.js';
export class NgxCountUpDirective {
constructor(elementRef) {
this.elementRef = elementRef;
/**
* Optional number of decimal places.
* Default is zero.
*/
this.decimals = 0;
/**
* Emits when the count-up animation has completed
*/
this.animationStarted = new EventEmitter();
/**
* Emits when the count-up animation has started
*/
this.animationCompleted = new EventEmitter();
this._startValue = 0;
this._endValue = 0;
this._duration = 2;
this._reanimateOnClick = false;
}
/**
* The value to count up to.
* Defaults to zero.
*/
get endValue() {
return this._endValue;
}
set endValue(v) {
this._endValue = coerceNumberProperty(v);
if (!!this.countUp) {
// TODO refactor to simply animate()?
this.countUp.update(this.endValue);
}
}
/**
* Whether or not the element should re-animate when clicked.
* Default is false.
*/
get reanimateOnClick() {
return this._reanimateOnClick;
}
set reanimateOnClick(v) {
this._reanimateOnClick = coerceBooleanProperty(v);
}
/**
* Duration of the animation in seconds.
* Defaults to 2[s].
*/
get duration() {
return this._duration;
}
set duration(v) {
this._duration = coerceNumberProperty(v);
}
/**
* Optional start value for the count.
* Defaults to zero.
*/
get startValue() {
return this._startValue;
}
set startValue(v) {
this._startValue = coerceNumberProperty(v);
}
ngAfterViewInit() {
this.countUp = this.createCountUp();
this.animate();
}
/**
* Handles the click event of the host element
*/
onClick() {
if (this.reanimateOnClick) {
this.animate();
}
}
/**
* Triggers the count-up animation.
*/
animate() {
this.countUp.reset();
this.onAnimationStarted();
if (this.endValue > 999) {
this.countUp.start(() => this.onAnimationCompleted(() => this.countUp.update(this.endValue)));
}
else {
this.countUp.start(() => this.onAnimationCompleted());
}
}
createCountUp() {
const diff = Math.abs(this.endValue - this.startValue);
const countUpFactory = (endValue, duration) => new CountUp(this.elementRef.nativeElement, this.startValue, endValue, this.decimals, duration, this.options);
let countUp;
if (diff > 999) {
const fixFactor = this.endValue > this.startValue ? -1 : 1;
const calculatedEnd = this.endValue + fixFactor * NgxCountUpDirective.LARGE_VALUE_FIX;
countUp = countUpFactory(calculatedEnd, this.duration / 2);
}
else {
countUp = countUpFactory(this.endValue, this.duration);
}
return countUp;
}
onAnimationStarted() {
this.animationStarted.emit();
}
onAnimationCompleted(fn) {
this.animationCompleted.emit();
if (!!fn) {
fn();
}
}
}
NgxCountUpDirective.LARGE_VALUE_FIX = 100;
NgxCountUpDirective.decorators = [
{ type: Directive, args: [{
selector: '[ngxCountUp]',
exportAs: 'ngxCountUp'
},] }
];
NgxCountUpDirective.ctorParameters = () => [
{ type: ElementRef }
];
NgxCountUpDirective.propDecorators = {
options: [{ type: Input, args: ['ngxCountUp',] }],
endValue: [{ type: Input }],
reanimateOnClick: [{ type: Input }],
duration: [{ type: Input }],
decimals: [{ type: Input }],
startValue: [{ type: Input }],
animationStarted: [{ type: Output }],
animationCompleted: [{ type: Output }],
onClick: [{ type: HostListener, args: ['click',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnQtdXAuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neC1leHRlbnNpb25zL2NvdW50LXVwLmpzLyIsInNvdXJjZXMiOlsibGliL2NvdW50LXVwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxVQUFVLEVBRVYsWUFBWSxFQUNaLE1BQU0sRUFDTixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEtBQUssT0FBTyxNQUFNLFlBQVksQ0FBQztBQU90QyxNQUFNO0lBdUZKLFlBQTZCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFyQ25EOzs7V0FHRztRQUVILGFBQVEsR0FBRyxDQUFDLENBQUM7UUFjYjs7V0FFRztRQUVNLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFckQ7O1dBRUc7UUFFTSx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2Qsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO0lBR29CLENBQUM7SUE3RXZEOzs7T0FHRztJQUNILElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsQ0FBTTtRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbEIscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFR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QztJQUNqQixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sb0JBQW9CLENBQUMsRUFBYTtRQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1IsRUFBRSxFQUFFLENBQUM7U0FDTjtJQUNILENBQUM7O0FBMUp1QixtQ0FBZSxHQUFXLEdBQUcsQ0FBQzs7WUFMdkQsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxjQUFjO2dCQUN4QixRQUFRLEVBQUUsWUFBWTthQUN2Qjs7O1lBaEJDLFVBQVU7OztzQkF3QlQsS0FBSyxTQUFDLFlBQVk7dUJBT2xCLEtBQUs7K0JBZ0JMLEtBQUs7dUJBWUwsS0FBSzt1QkFZTCxLQUFLO3lCQU9MLEtBQUs7K0JBV0wsTUFBTTtpQ0FNTixNQUFNO3NCQW1CTixZQUFZLFNBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIElucHV0LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlclxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSxcclxuICBjb2VyY2VOdW1iZXJQcm9wZXJ0eVxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCAqIGFzIENvdW50VXAgZnJvbSAnY291bnR1cC5qcyc7XHJcbmltcG9ydCB7IENvdW50VXBPcHRpb25zIH0gZnJvbSAnY291bnR1cC5qcyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tuZ3hDb3VudFVwXScsXHJcbiAgZXhwb3J0QXM6ICduZ3hDb3VudFVwJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4Q291bnRVcERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExBUkdFX1ZBTFVFX0ZJWDogbnVtYmVyID0gMTAwO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvdW50VXAuanMgQVBJLlxyXG4gICAqIERlZmF1bHRzIHRvIHVuZGVmaW5lZC5cclxuICAgKi9cclxuICBASW5wdXQoJ25neENvdW50VXAnKVxyXG4gIG9wdGlvbnM6IENvdW50VXBPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdmFsdWUgdG8gY291bnQgdXAgdG8uXHJcbiAgICogRGVmYXVsdHMgdG8gemVyby5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGdldCBlbmRWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmRWYWx1ZTtcclxuICB9XHJcbiAgc2V0IGVuZFZhbHVlKHY6IGFueSkge1xyXG4gICAgdGhpcy5fZW5kVmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2KTtcclxuICAgIGlmICghIXRoaXMuY291bnRVcCkge1xyXG4gICAgICAvLyBUT0RPIHJlZmFjdG9yIHRvIHNpbXBseSBhbmltYXRlKCk/XHJcbiAgICAgIHRoaXMuY291bnRVcC51cGRhdGUodGhpcy5lbmRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgZWxlbWVudCBzaG91bGQgcmUtYW5pbWF0ZSB3aGVuIGNsaWNrZWQuXHJcbiAgICogRGVmYXVsdCBpcyBmYWxzZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGdldCByZWFuaW1hdGVPbkNsaWNrKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlYW5pbWF0ZU9uQ2xpY2s7XHJcbiAgfVxyXG4gIHNldCByZWFuaW1hdGVPbkNsaWNrKHY6IGFueSkge1xyXG4gICAgdGhpcy5fcmVhbmltYXRlT25DbGljayA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIER1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gaW4gc2Vjb25kcy5cclxuICAgKiBEZWZhdWx0cyB0byAyW3NdLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGR1cmF0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xyXG4gIH1cclxuICBzZXQgZHVyYXRpb24odjogYW55KSB7XHJcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGNvZXJjZU51bWJlclByb3BlcnR5KHYpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAqIERlZmF1bHQgaXMgemVyby5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGRlY2ltYWxzID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgc3RhcnQgdmFsdWUgZm9yIHRoZSBjb3VudC5cclxuICAgKiBEZWZhdWx0cyB0byB6ZXJvLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHN0YXJ0VmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRWYWx1ZTtcclxuICB9XHJcbiAgc2V0IHN0YXJ0VmFsdWUodjogYW55KSB7XHJcbiAgICB0aGlzLl9zdGFydFZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyB3aGVuIHRoZSBjb3VudC11cCBhbmltYXRpb24gaGFzIGNvbXBsZXRlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IGFuaW1hdGlvblN0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHdoZW4gdGhlIGNvdW50LXVwIGFuaW1hdGlvbiBoYXMgc3RhcnRlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHJlYWRvbmx5IGFuaW1hdGlvbkNvbXBsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfc3RhcnRWYWx1ZSA9IDA7XHJcbiAgcHJpdmF0ZSBfZW5kVmFsdWUgPSAwO1xyXG4gIHByaXZhdGUgX2R1cmF0aW9uID0gMjtcclxuICBwcml2YXRlIF9yZWFuaW1hdGVPbkNsaWNrID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBjb3VudFVwOiBDb3VudFVwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY291bnRVcCA9IHRoaXMuY3JlYXRlQ291bnRVcCgpO1xyXG4gICAgdGhpcy5hbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBjbGljayBldmVudCBvZiB0aGUgaG9zdCBlbGVtZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxyXG4gIG9uQ2xpY2soKSB7XHJcbiAgICBpZiAodGhpcy5yZWFuaW1hdGVPbkNsaWNrKSB7XHJcbiAgICAgIHRoaXMuYW5pbWF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlcnMgdGhlIGNvdW50LXVwIGFuaW1hdGlvbi5cclxuICAgKi9cclxuICBhbmltYXRlKCkge1xyXG4gICAgdGhpcy5jb3VudFVwLnJlc2V0KCk7XHJcbiAgICB0aGlzLm9uQW5pbWF0aW9uU3RhcnRlZCgpO1xyXG4gICAgaWYgKHRoaXMuZW5kVmFsdWUgPiA5OTkpIHtcclxuICAgICAgdGhpcy5jb3VudFVwLnN0YXJ0KCgpID0+XHJcbiAgICAgICAgdGhpcy5vbkFuaW1hdGlvbkNvbXBsZXRlZCgoKSA9PiB0aGlzLmNvdW50VXAudXBkYXRlKHRoaXMuZW5kVmFsdWUpKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb3VudFVwLnN0YXJ0KCgpID0+IHRoaXMub25BbmltYXRpb25Db21wbGV0ZWQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNvdW50VXAoKTogQ291bnRVcCB7XHJcbiAgICBjb25zdCBkaWZmID0gTWF0aC5hYnModGhpcy5lbmRWYWx1ZSAtIHRoaXMuc3RhcnRWYWx1ZSk7XHJcbiAgICBjb25zdCBjb3VudFVwRmFjdG9yeTogKGVuZFZhbHVlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpID0+IENvdW50VXAgPSAoXHJcbiAgICAgIGVuZFZhbHVlLFxyXG4gICAgICBkdXJhdGlvblxyXG4gICAgKSA9PlxyXG4gICAgICBuZXcgQ291bnRVcChcclxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgICB0aGlzLnN0YXJ0VmFsdWUsXHJcbiAgICAgICAgZW5kVmFsdWUsXHJcbiAgICAgICAgdGhpcy5kZWNpbWFscyxcclxuICAgICAgICBkdXJhdGlvbixcclxuICAgICAgICB0aGlzLm9wdGlvbnNcclxuICAgICAgKTtcclxuICAgIGxldCBjb3VudFVwOiBDb3VudFVwO1xyXG5cclxuICAgIGlmIChkaWZmID4gOTk5KSB7XHJcbiAgICAgIGNvbnN0IGZpeEZhY3RvciA9IHRoaXMuZW5kVmFsdWUgPiB0aGlzLnN0YXJ0VmFsdWUgPyAtMSA6IDE7XHJcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRFbmQgPVxyXG4gICAgICAgIHRoaXMuZW5kVmFsdWUgKyBmaXhGYWN0b3IgKiBOZ3hDb3VudFVwRGlyZWN0aXZlLkxBUkdFX1ZBTFVFX0ZJWDtcclxuICAgICAgY291bnRVcCA9IGNvdW50VXBGYWN0b3J5KGNhbGN1bGF0ZWRFbmQsIHRoaXMuZHVyYXRpb24gLyAyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvdW50VXAgPSBjb3VudFVwRmFjdG9yeSh0aGlzLmVuZFZhbHVlLCB0aGlzLmR1cmF0aW9uKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb3VudFVwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkFuaW1hdGlvblN0YXJ0ZWQoKSB7XHJcbiAgICB0aGlzLmFuaW1hdGlvblN0YXJ0ZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkFuaW1hdGlvbkNvbXBsZXRlZChmbj86IEZ1bmN0aW9uKSB7XHJcbiAgICB0aGlzLmFuaW1hdGlvbkNvbXBsZXRlZC5lbWl0KCk7XHJcbiAgICBpZiAoISFmbikge1xyXG4gICAgICBmbigpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=