From 06a93022784d6c133694cc59a5166f6f086d6bcd Mon Sep 17 00:00:00 2001 From: Vadim Date: Fri, 2 Jul 2021 00:21:50 +0300 Subject: [PATCH] #31 : Add ProgressManager --- src/utils/ProgressManager.js | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/utils/ProgressManager.js diff --git a/src/utils/ProgressManager.js b/src/utils/ProgressManager.js new file mode 100644 index 0000000..260252d --- /dev/null +++ b/src/utils/ProgressManager.js @@ -0,0 +1,44 @@ +const PROGRESS_STEPS_COUNT = 100 + +export class ProgressManager { + #autoplayDuration + #onValueChange + + #interval + #paused = false + + constructor({ + autoplayDuration, + onValueChange, + }) { + this.#autoplayDuration = autoplayDuration + this.#onValueChange = onValueChange + } + + start() { + let value = 0 + let progress = 0 + const stepMs = this.#autoplayDuration / PROGRESS_STEPS_COUNT + + this.#interval = setInterval(() => { + if (this.#paused) { + return + } + progress += stepMs + value = progress / this.#autoplayDuration + this.#onValueChange(value) + }, stepMs) + } + + pause() { + this.#paused = true + } + + resume() { + this.#paused = false + } + + reset() { + clearInterval(this.#interval) + } +}