#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: yui-throttle/js/throttle.js

    /**
    Throttles a call to a method based on the time between calls. This method is attached
    to the `Y` object and is <a href="../classes/YUI.html#method_throttle">documented there</a>.

        var fn = Y.throttle(function() {
            counter++;
        });

        for (i; i< 35000; i++) {
            out++;
            fn();
        }

    @module yui
    @submodule yui-throttle
    */

    /*! Based on work by Simon Willison: http://gist.github.com/292562 */
    /**
     * Throttles a call to a method based on the time between calls.
     * @method throttle
     * @for YUI
     * @param fn {function} The function call to throttle.
     * @param ms {int} The number of milliseconds to throttle the method call.
     * Can set globally with Y.config.throttleTime or by call. Passing a -1 will
     * disable the throttle. Defaults to 150.
     * @return {function} Returns a wrapped function that calls fn throttled.
     * @since 3.1.0
     */
    Y.throttle = function(fn, ms) {
        ms = (ms) ? ms : (Y.config.throttleTime || 150);

        if (ms === -1) {
            return function() {
                fn.apply(this, arguments);
            };
        }

        var last = Y.Lang.now();

        return function() {
            var now = Y.Lang.now();
            if (now - last > ms) {
                last = now;
                fn.apply(this, arguments);
            }
        };
    };