Delayedaction.js

From XPUB & Lens-Based wiki
   function delayedaction (action, time) {
        if (time === undefined) { time = 1000; }
        var timeout_id = null,
            that = {};
        function cancel () {
            if (timeout_id !== null) {
                window.clearTimeout(timeout_id);
                timeout_id = null;
            }
        }
        that.cancel = cancel;
        function performAction () {
            action();
            timeout_id = null;
        }
        that.do_soon = function () {
            cancel();
            timeout_id = window.setTimeout(performAction, time);
        };
        that.do_now = function () {
            performAction();
        };
        return that;
    }

Usage:

function sayhello () {
   console.log("hello");
}
var delayedhello = delayedaction (sayhello, 1000);
delayedhello.do_soon();
delayedhello.do_soon();
delayedhello.do_soon();
delayedhello.do_soon();