JSFiddle - React, Tailwind, and code Playground

HTML

<div class="keyboard"></div>

CSS

.keyboard {
    background: red;
    position: absolute;
    width: 10px;
    height: 10px;
}

JavaScript

// Check if it's a function
function isFunction(functionToCheck) {
    var getType = {};
    return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
}

// Store the keys and callback for each
var keys = {};
var keycalls = {};

// Loop and call all the needed callbacks
function run_keys() {
    $.each(keys, function (index, value) {
        if (value == true) {
            console.log(keys);
            var fun = keycalls[index];
            if (isFunction(fun)) fun();
        }
    });
}

window.setInterval(run_keys, 50);

// Store a key
$(document).keydown(function (e) {
    keys[e.which] = true;
});
// Delete a key
$(document).keyup(function (e) {
    delete keys[e.which];
});
// Assign a callback to a key
keyboard = function (key, callback) {
    console.log(callback);
    keycalls[key.toUpperCase().charCodeAt()] = callback;
}
// Assign keys
// Assign w to up action
keyboard("w", function () {
    $(".keyboard").animate({
        'top': "-=5px"
    }, 0);
});
keyboard("a", function () {
    $(".keyboard").animate({
        'left': "-=5px"
    }, 0);
});
keyboard("s", function () {
    $(".keyboard").animate({
        'top': "+=5px"
    }, 0);
});
keyboard("d", function () {
    $(".keyboard").animate({
        'left': "+=5px"
    }, 0);
});