Skip to content

Latest commit

 

History

History
63 lines (49 loc) · 1.62 KB

README.md

File metadata and controls

63 lines (49 loc) · 1.62 KB

PLEASE READ THIS!

This code isn't mine, but someone named Илья Зеленько post this on Stackoverflow and i found it very useful. I hope his code works for whoever need it!

How to use:

let seconds = 0
const timer = new Timer(() => {
    seconds++

    console.log('seconds', seconds)

    if (seconds === 8) {
        timer.clear()

        alert('Game over!')
    }
}, 1000)

timer.pause()
console.log('isPaused: ', timer.paused)

setTimeout(() => {
    timer.resume()
    console.log('isPaused: ', timer.paused)
}, 2500)


function Timer(callback, delay) {
    let callbackStartTime
    let remaining = 0

    this.timerId = null
    this.paused = false

    this.pause = () => {
        this.clear()
        remaining -= Date.now() - callbackStartTime
        this.paused = true
    }
    this.resume = () => {
        window.setTimeout(this.setTimeout.bind(this), remaining)
        this.paused = false
    }
    this.setTimeout = () => {
        this.clear()
        this.timerId = window.setInterval(() => {
            callbackStartTime = Date.now()
            callback()
        }, delay)
    }
    this.clear = () => {
        window.clearInterval(this.timerId)
    }

    this.setTimeout()
}

The code is written quickly and did not refactored, raise the rating of my answer if you want me to improve the code and give ES2015 version (classes).

-- Илья Зеленько