mutant
Version:
Create observables and map them to DOM elements. Massively inspired by hyperscript and observ-*. No virtual dom, just direct observable bindings. Unnecessary garbage collection is avoided by using mutable objects instead of blasting immutable junk all ove
37 lines (29 loc) • 785 B
JavaScript
var LazyWatcher = require('./lib/lazy-watcher')
var watchThrottle = require('./watch-throttle')
var resolve = require('./resolve')
module.exports = function Throttle (input, minDelay) {
// default delay is 20 ms
minDelay = minDelay || 20
var binder = LazyWatcher(update, listen, unlisten)
binder.value = resolve(input)
var releases = []
var result = function MutantThrottle (listener) {
if (!listener) {
return binder.getValue()
}
return binder.addListener(listener)
}
function update () {
binder.value = resolve(input)
return true
}
function listen () {
releases.push(watchThrottle(input, minDelay, binder.onUpdate))
}
function unlisten () {
while (releases.length) {
releases.pop()()
}
}
return result
}