ngx-typed-js
Version:
An Angular integration for [Typed.js](https://github.com/mattboldt/typed.js/).
128 lines (98 loc) • 8.43 kB
Markdown
# ngx-typed-js
An Angular integration for [Typed.js](https://github.com/mattboldt/typed.js/).
Typed.js is a library that types. Enter in any string, and watch it type at the speed you've set, backspace what it's typed, and begin a new sentence for however many strings you've set.
[](https://nodei.co/npm/ngx-typed-js/)
[Live demo](https://vlad.vidac.software/) - [Source code](https://github.com/thevladeffect/portfolio)
## Table of contents
- [Installation](#installation)
- [Usage](#usage)
- [Example](#examples)
# Installation
```
npm install --save ngx-typed-js
```
## Import in your module
```javascript
import {NgxTypedJsModule} from 'ngx-typed-js';
@NgModule({
imports: [
NgxTypedJsModule,
],
})
export class AppModule {
}
```
# Usage
To start using it add the `ngx-typed-js` component to your template and pass the text, which should be typed to the `strings` input. In addition you need to pass an element with the class `typing` to the component tag.
```html
<ngx-typed-js [strings]="['Bananas are awesome', 'Nobody can argue this fact.']">
<h1 class="typing"></h1>
</ngx-typed-js>
```
The `typing` class also allows you to just animate certain parts of a string:
```html
<ngx-typed-js [strings]="['amazing.', 'yellow.', 'delicious.']" [shuffle]="true" [typeSpeed]="40">
Bananas are <span class="typing"></span>
</ngx-typed-js>
```
## Accessing methods exposed by vanilla Typed.js
You can access the methods on your `Typed` object by using a `@ViewChild` decorator:
```javascript
@ViewChild(NgxTypedJsComponent) typed: NgxTypedJsComponent;
```
## Properties
You can make use of the following properties in order to customize your typing experience:
| Property | Type | Description | Usage |
|----------------------|---------|----------------------------------------------------------------------|-----------------------------------------------------------------|
| strings | Array | strings to be typed | `[strings]="['Text 1', 'Text 2']"` |
| stringsElement | String | ID of element containing string children | `[stringsElement]="'myId'"` |
| typeSpeed | Number | type speed in milliseconds | `[typeSpeed]="50"` |
| startDelay | Number | time before typing starts in milliseconds | `[startDelay]="1000"` |
| backSpeed | Number | backspacing speed in milliseconds | `[backSpeed]="10"` |
| smartBackspace | Boolean | only backspace what doesn't match the previous string | `[smartBackspace]="true"` |
| shuffle | Boolean | shuffle the strings | `[shuffle]="true"` |
| backDelay | Number | time before backspacing in milliseconds | `[backDelay]="100"` |
| fadeOut | Boolean | Fade out instead of backspace | `[fadeOut]="true"` |
| fadeOutClass | String | css class for fade animation | `[fadeOutClass]="'fadeOutClass'"` |
| fadeOutDelay | Number | fade out delay in milliseconds | `[fadeOutDelay]="100"` |
| loop | Boolean | loop strings | `[loop]="true"` |
| loopCount | Number | amount of loops | `[loopCount]="3"` |
| showCursor | Boolean | show cursor | `[showCursor]="true"` |
| cursorChar | String | character for cursor | `[cursorChar]="'_'"` |
| autoInsertCss | Boolean | insert CSS for cursor and fadeOut into HTML | `[autoInsertCss]="true"` |
| attr | String | attribute for typing Ex: input placeholder, value, or just HTML text | `[attr]="'placeholder'"` |
| bindInputFocusEvents | Boolean | bind to focus and blur if el is text input | `[bindInputFocusEvents]="true"` |
| contentType | String | 'html' or 'null' for plaintext | `[contentType]="'html'"` |
These are the same properties used with vanilla Typed.js. For more information about them check out the original project.
In addition to the original properties I have added a new one: `cursorColor`. This takes the value of a CSS color string (e.g. `[color]="red"`, `[color]="#fff"`).
By default, the cursor color and size will be set to the values of computed styles of the passed `.typing` element.
## Events
You can listen to the following events:
| Event | Description | Usage |
|------------------------|----------------------------------------------------------------------|-----------------------------------------------------------------|
| completed | All typing is complete | `(completed)="doSmth()"` |
| preStringTyped | Before each string is typed | `(preStringTyped)="doSmth(indexOfString)"` |
| stringTyped | After each string is typed | `(stringTyped)="doSmth(indexOfString)"` |
| lastStringBackspaced | During looping, after last string is typed | `(lastStringBackspaced)="doSmth()"` |
| typingPaused | Typing has been stopped | `(typingPaused)="doSmth(indexOfString)"` |
| typingResumed | Typing has been started after being stopped | `(typingResumed)="doSmth(indexOfString)"` |
| reset | After reset | `(reset)="doSmth()"` |
| stopped | After stop | `(stopped)="doSmth(indexOfString)"` |
| started | After start | `(started)="doSmth(indexOfString)"` |
| destroyed | After destroy | `(destroyed)="doSmth()"` |
# Examples
```html
<!-- infinite loop -->
<ngx-typed-js [strings]="['awesome', 'amazing']" [loop]="true" (completed)="doSmth()">
<h2>We are an <span class="typing"></span> company!</h2>
</ngx-typed-js>
<!-- type pausing -->
<ngx-typed-js [strings]="['This is text ^1000 which gets paused for 1 second']">
<h2 class="typing"></h2>
</ngx-typed-js>
```
## Thank you
Big thanks to the author of [vue-typed-js](https://github.com/Orlandster/vue-typed-js) from which I inspired heavily and of course to the original author of [Typed.js](https://github.com/mattboldt/typed.js/).
Contributions are welcome.
# License
[MIT](https://opensource.org/licenses/MIT)