angular-svg-round-progressbar
Version:
Angular module that uses SVG to create a circular progressbar
141 lines (116 loc) • 7.57 kB
Markdown
# Angular SVG round progressbar
Angular module that uses SVG to create a circular progressbar
## [Demo](https://crisbeto.github.io/angular-svg-round-progressbar/)
## [Click here for the Angular 1.x version](https://github.com/crisbeto/angular-svg-round-progressbar/tree/angular-1.x)
## Install
First you have to install the module through npm:
```bash
npm install angular-svg-round-progressbar --save
```
Afterwards you need to import the `RoundProgressModule` in your module:
```typescript
import {NgModule} from '@angular/core';
import {RoundProgressModule} from 'angular-svg-round-progressbar';
@NgModule({
imports: [RoundProgressModule]
})
export class YourModule {}
```
Or `RoundProgressComponent`, if you're using standalone:
```typescript
import {Component} from '@angular/core';
import {RoundProgressComponent} from 'angular-svg-round-progressbar';
@Component({
standalone: true,
imports: [RoundProgressComponent],
template: '...'
})
export class YourComponent {}
```
If you're using SystemJS as your module loader, there is also a UMD bundle at `./node_modules/angular-svg-round-progressbar/bundles/angular-svg-round-progressbar.umd.js`.
## Options
| Name | Description | Required | Default value | Possible values |
| --- | --- | --- | --- | --- |
| `current` | The current progress. Limited by the `max` option. | Yes | `undefined` | `number` |
| `max` | The progress' maximum value. | Yes | `undefined` | `number` |
| `radius` | Radius of the circle. | No | `125` | `number` |
| `color` | The color of the `current` value on the circle. | No | `#45ccce` | `string` |
| `background` | Color of the circle's background. | No | `#eaeaea` | `string` |
| `stroke` | Specifies the circle's thickness. | No | `15` | `number` |
| `semicircle` | Whether the progressbar should be a full circle or a semicircle. | No | `false` | `boolean` |
| `clockwise` | Whether the progressbar should rotate clockwise or counter-clockwise. | No | `true` | `boolean` |
| `responsive` | Whether the progressbar should fit inside its parent container. **Note** Turning this option on will override the specified radius in order to make the circle fit in its parent. The radius to stroke ratio won't change. | No | `false` | `boolean` |
| `rounded` | Whether the current progress ending should be rounded or straight. | No | `false` | `boolean` |
| `duration` | The duration of the animation. Pass 0 for no animation. | No | `800` | `number` |
| `animationDelay` | Milliseconds to wait before starting an animation. | No | `0` | `number` |
| `onRender` | Callback function that gets executed every time the circle is animated. The function gets called with the current progress as it is being animated. | No | `undefined` | `Function` |
| `animation` | The easing function that will be used when animating. | No | easeOutCubic | linearEase <br> easeInQuad <br> easeOutQuad <br> easeInOutQuad <br> easeInCubic <br> easeOutCubic <br> easeInOutCubic <br> easeInQuart <br> easeOutQuart <br> easeInOutQuart <br> easeInQuint <br> easeOutQuint <br> easeInOutQuint <br> easeInSine <br> easeOutSine <br> easeInOutSine <br> easeInExpo <br> easeOutExpo <br> easeInOutExpo <br> easeInCirc <br> easeOutCirc <br> easeInOutCirc <br> easeInElastic <br> easeOutElastic <br> easeInOutElastic <br> easeInBack <br> easeOutBack <br> easeInOutBack <br> easeInBounce <br> easeOutBounce <br> easeInOutBounce <br> |
| `innerCircleFill` | Color to use for the circular area inside the gauge. Defaults to `none` which is transparent. | No | `none` | `string` any value acceptable for the CSS `fill` property |
### Minimal example:
```html
<round-progress [current]="current" [max]="max"/>
```
### Full example:
```html
<round-progress
[current]="current"
[max]="max"
[color]="'#45ccce'"
[background]="'#eaeaea'"
[radius]="125"
[stroke]="20"
[semicircle]="true"
[rounded]="true"
[clockwise]="false"
[responsive]="false"
[duration]="800"
[animation]="'easeInOutQuart'"
[animationDelay]="0"
[innerCircleFill]="transparent"
(onRender)="doSomethingWithCurrentValue($event)"/>
```
### Configuring the default values
The module comes with some pre-configured options for things like colors, size, stroke etc. If these
don't match your app's design, you can change the global defaults by providing a new value for the
`ROUND_PROGRESS_DEFAULTS` injection token. Whenever an option isn't defined on a `round-progress`
element, it's value will be taken from the defaults.
```typescript
import {NgModule} from '@angular/core';
import {
RoundProgressModule,
RoundProgressConfig,
ROUND_PROGRESS_DEFAULTS
} from 'angular-svg-round-progressbar';
@NgModule({
imports: [RoundProgressModule],
providers: [{
provide: ROUND_PROGRESS_DEFAULTS,
useValue: {
color: '#f00',
background: '#0f0'
}
}]
})
export class YourModule {};
```
## Browser support
* Internet Explorer 9+
* Firefox 28.0+
* Chrome 31+
* Safari 5.1+
* and pretty much any browser that supports SVG
**Note:** Some older browsers may require (a [polyfill for `requestAnimationFrame`](https://gist.github.com/paulirish/1579671)).
[Read more about the `requestAnimationFrame` browser support.](https://caniuse.com/#feat=requestanimationframe)
## Development
The project uses `yarn` to manage dependencies to make sure that you [have it installed](https://yarnpkg.com/getting-started/install).
* `yarn` to install development dependencies.
* `yarn lint` to lint the source files.
* `yarn start` to run a development server. Go to `localhost:4200` to see the demo.
* `yarn build-lib` to build the library in production mode.
* `yarn build-demo` to build the demo in production mode.
* `yarn release-lib` to build the library and release it to npm.
* `yarn release-demo` to build the demo and deploy it to GitHub Pages.
## Credits
* [Modernizr](https://modernizr.com/) for the SVG support test
* [Robert Penner](https://www.robertpenner.com/easing/) for the easing function
* [opsb](https://stackoverflow.com/questions/5736398/how-to-calculate-the-svg-path-for-an-arc-of-a-circle) for some of the math