Skip to content

Instantly share code, notes, and snippets.

@genoma
Created April 7, 2014 15:48
Show Gist options
  • Save genoma/10022867 to your computer and use it in GitHub Desktop.
Save genoma/10022867 to your computer and use it in GitHub Desktop.
Debouncing function for jQuery .resize() in Coffeescript
## http://www.paulirish.com/2009/throttled-smartresize-jquery-event-handler/
## ---------------------------------------------
## debouncing function from John Hann
## http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
#
# (function($,sr){
# var debounce = function (func, threshold, execAsap) {
# var timeout;
# return function debounced () {
# var obj = this, args = arguments;
# function delayed () {
# 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){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); };
#
# })(jQuery,'smartresize');
(($, sr) ->
debounce = (func, threshold, execAsap) ->
timeout = undefined
debounced = ->
delayed = ->
func.apply obj, args unless execAsap
timeout = null
return
obj = this
args = arguments
if timeout
clearTimeout timeout
else func.apply obj, args if execAsap
timeout = setTimeout(delayed, threshold or 100)
return
# Smartresize
jQuery.fn[sr] = (fn) ->
(if fn then @bind("resize", debounce(fn)) else @trigger(sr))
return
) jQuery, "smartresize"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment