JSFiddle - React, Tailwind, and code Playground

by tabalinas

HTML

<button>Click Me</button>

JavaScript

// func1
var ratedClick = function(click, timeout) {
    var locked = false;
    return function() {
        if(!locked) {
            click();
            locked = true;

            setTimeout(function() {
                locked = false;
            }, timeout);
        }
    };
};


// func2
var ratedQueueClick = function(click, timeout) {
    var counter = 0;
    var locked = false;
    var queueExec = function() {
        if(counter) {
            click();
            counter--;
            setTimeout(queueExec, timeout);
        } else {
            locked = false;
        }
    };
    
    return function() {
        if(!locked) {
            click();
            locked = true;
            setTimeout(queueExec, timeout);
        } else {
            counter++;
        }
    };
};


// main
var time = new Date;

$("button").on("click", ratedQueueClick(function() {
    console.log("handled: " + (new Date - time));
}, 500));

// tests
setTimeout(function() {
    $("button").click();
}, 0);

setTimeout(function() {
    $("button").click();
}, 150);

setTimeout(function() {
    $("button").click();
}, 400);

setTimeout(function() {
    $("button").click();
}, 600);