JSFiddle - React, Tailwind, and code Playground

HTML

<div id="transformer">
  <div class="child"></div>
</div>

CSS

#transformer {
    -webkit-transform-style: preserve-3d; 
  margin: 0px; 
  padding: 0px;
  top: 100px;
  left: 100px;
    
  position: absolute;
  -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);

}

.child {
    overflow: visible;
    width: 200px;
    height: 200px;
    border: 2px solid black;
    background-color: dodgerblue;
}

JavaScript

function sin(num) { return Math.sin(num / 180 * Math.PI); };
    function cos(num) { return Math.cos(num / 180 * Math.PI); };    

    xPrev = 0;
    yPrev = 0;

    $(document).on('mousemove', function (e) {
        var MOVE = 10; // how much to move
        var XTURN = 1; // how much to rotate
        var YTURN = 1; // how much to rotate
        var transformer, origMat, translationMatrix, result;
        transformer = document.getElementById("transformer");

        
            origMat = new WebKitCSSMatrix(window.getComputedStyle(transformer).webkitTransform);

        //turn left
        if (e.pageX < xPrev) {
            if (XTURN < 0) {
                XTURN *= -1;
            }
            xPrev = e.pageX;
        //turn right
        } else {
            if (XTURN > 0) {
                XTURN *= -1;
            }
            xPrev = e.pageX;
            
        }
        //look up
        if (e.pageY < yPrev) {
            if (YTURN < 0) {
                YTURN *= -1;
            } 
            yPrev = e.pageY;
        //look down
        } else {
            if (YTURN > 0) {
                YTURN *= -1;
            }
            yPrev = e.pageY;
        }

        translationMatrix = new WebKitCSSMatrix("matrix3d(" + cos(XTURN).toFixed(10) + ",0," + sin(XTURN).toFixed(10) + ",0,0,"+ cos(-YTURN).toFixed(10) +","+ sin(YTURN).toFixed(10) +",0, " + sin(-XTURN).toFixed(10) + ","+ sin(-YTURN).toFixed(10) +"," + cos(-XTURN).toFixed(10) + ",0,0,0,0,1)");
        
        transformer.style.webkitTransform = translationMatrix.multiply(origMat).toString();
    });