debounce scroll

by John Allan

JavaScript

(function($, sr) {

    // debouncing function from John Hann
    // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
    var debounce = function(func, threshold, execAsap) {
        var timeout;
        console.log('debounce');
        console.log(this);
        return function debounced() {
            var obj = this,
                args = arguments;
                console.log('return debounce');
                console.log(this);
            function delayed() {
                console.log('execute delayed');
                console.log(this);
                if (!execAsap) func.apply(obj, args);
                timeout = null;
            };

            if (timeout) clearTimeout(timeout);
            else if (execAsap) func.apply(obj, args);

            timeout = setTimeout(delayed, threshold || 100);
        };
    }
        
    // smartresize 
    jQuery.fn[sr] = function(fn) {
        console.log('binding');
        console.log(this);
        return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr);
    };

})(jQuery, 'smartresize');


// usage:
$(window).smartresize(function() {
    console.log('apply plugin');
    console.log(this);
});