Skip to content

Instantly share code, notes, and snippets.

@BarthesSimpson
Last active June 24, 2019 04:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BarthesSimpson/1eb620aab68f95223802e6d945f446aa to your computer and use it in GitHub Desktop.
Save BarthesSimpson/1eb620aab68f95223802e6d945f446aa to your computer and use it in GitHub Desktop.
Hook for simulating some typing
import { useEffect } from "react"
const TIMER_WINDOW = 20000
const TYPING_DELAY = 20
const MAX_LENGTH = 20
export const useTyping = (setState) =>
useEffect(() => {
const inputs = document.getElementsByClassName("input-letter")
Array.from(inputs).forEach((el, idx) => {
const delay = (1 + idx) * TYPING_DELAY
const isTyping = setInterval(() => {
const l = el.id
setState(_state => ({
..._state,
[l]:
_state[l].length < MAX_LENGTH
? _state[l] + _state[l].slice(0, 1)
: _state[l].slice(0, 1)
}))
}, delay)
setTimeout(() => {
clearInterval(isTyping)
}, TIMER_WINDOW)
})
}, [])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment