UNPKG

@omnedia/rxjs-typewriter

Version:

A simple typewriter effect to animate text.

65 lines 1.71 kB
// src/index.ts import { concat, concatMap, delay, from, ignoreElements, interval, map, of, repeat, take } from "rxjs"; var TypeWriter = class { constructor() { this.writeSpeed = 40; this.waitAfterTyped = 3500; this.waitAfterDeleted = 50; this.loop = true; this.wordsCount = 0; } typeWriteEffect(words, loop, writeSpeed, deleteDelay, writeDelay) { this.writeSpeed = writeSpeed != null ? writeSpeed : this.writeSpeed; this.waitAfterTyped = deleteDelay != null ? deleteDelay : this.waitAfterTyped; this.waitAfterDeleted = writeDelay != null ? writeDelay : this.waitAfterDeleted; this.loop = loop != null ? loop : this.loop; this.wordsCount = words.length; return this.startTypewriter(words); } startTypewriter(words) { if (this.loop === false) { return from(words).pipe(concatMap((word) => this.typeEffect(word))); } return from(words).pipe( concatMap((word) => this.typeEffect(word)), repeat() ); } typeEffect(word) { if (this.loop === false) { this.wordsCount -= 1; } return concat( this.typeWord(word), of("").pipe(delay(this.waitAfterTyped), ignoreElements()), this.typeWord(word, true), of("").pipe(delay(this.waitAfterDeleted), ignoreElements()) ); } typeWord(word, backwards) { if (this.loop === false && this.wordsCount <= 0 && backwards) { return of(word); } return interval(this.writeSpeed).pipe( map((x) => { return backwards ? word.substring(0, word.length - x) : word.substring(0, x + 1); }), take(word.length + 1) ); } }; export { TypeWriter }; //# sourceMappingURL=index.mjs.map