Skip to content

Instantly share code, notes, and snippets.

@makadev
Last active May 24, 2017 10:33
Show Gist options
  • Save makadev/fda0de62afdf1845b20f1e0d0024605f to your computer and use it in GitHub Desktop.
Save makadev/fda0de62afdf1845b20f1e0d0024605f to your computer and use it in GitHub Desktop.
Generic Event Debouncer (f.e. for resize event)
"use strict";
function Debouncer() {
var deb_record = {
exists: false,
fn: null,
delay: 0,
registered: 0,
invoke: false,
handler: null
};
return {
reset: function() {
if(deb_record.exists !== false) {
try {
deb_record.handler = null;
deb_record.fn = null;
} catch (e) {
// pass
}
deb_record.exists = false;
}
},
fire: function(fn, debounce_delay = 100) {
if(deb_record.exists !== false) {
if(deb_record.invoke) {
deb_record.registered = new Date();
}
return;
}
deb_record.exists = true;
deb_record.fn = fn;
deb_record.delay = debounce_delay;
deb_record.registered = new Date();
deb_record.invoke = true;
function handler() {
if((new Date() - deb_record.registered) < deb_record.delay) {
setTimeout(handler, deb_record.delay);
} else {
deb_record.invoke = false;
fn();
}
};
deb_record.handler = handler;
setTimeout(handler, deb_record.delay);
},
refire: function(fn, debounce_delay = 100) {
var _reset = this.reset;
this.fire(function() {
fn();
_reset();
}, debounce_delay);
}
};
};
// testing
$(document).ready(function() {
var debouncer = new Debouncer();
$(window).resize(function(event) {
debouncer.refire(function(){
console.log("debounced event fired");
}, 200);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment