JSFiddle - React, Tailwind, and code Playground

HTML

<canvas id="canvas_element" width="1000" height="1000" />

JavaScript

var cloudSize = 3;

var canvas = document.getElementById('canvas_element');
var c = canvas.getContext('2d');
var prevX = -1;
var prevY = -1;
var curX = -1;
var curY = -1;
var distance = 0;
var direction = 0;

function drawMouse(x, y, angle, gray){
    var grayVal = Math.round(gray*255);
    var grayString = "rgb(" + grayVal + "," + grayVal +"," + grayVal + ")";
    c.fillStyle = grayString;
    c.strokeStyle = grayString;
    c.lineWidth = 1;
    c.beginPath();
    c.moveTo(x, y);
    c.lineTo(x + 16*Math.cos(angle + Math.PI/2.0 + Math.PI/8.0), y + 16*Math.sin(angle + Math.PI/2.0 + Math.PI/8.0));
    c.moveTo(x, y);
    c.lineTo(x + 16*Math.cos(angle + Math.PI/2.0 - Math.PI/8.0), y + 16*Math.sin(angle + Math.PI/2.0 - Math.PI/8.0));
    c.lineTo(x + 16*Math.cos(angle + Math.PI/2.0 + Math.PI/8.0), y + 16*Math.sin(angle + Math.PI/2.0 + Math.PI/8.0));
    c.stroke();
    c.fill();
    c.beginPath();
    c.moveTo(x, y);
    c.lineTo(x + 24*Math.cos(angle + Math.PI/2), y + 24*Math.sin(angle + Math.PI/2));
    c.stroke();
}

function sum(array){
    var s = 0.0;
    for(var i=0; i<array.length; i++){
        s += array[i];
    }
    return s;
}

var sins = [];
var coss = [];
var lengths = [];
var times = [];
var index = 0;
var limit = 20;
var variance = 0;
var prevTime = new Date().getTime();
function updateDistanceAndDirection(x, y){
    var angle = Math.atan2(prevY - curY, prevX - curX);
    sins[index] = Math.sin(angle);
    coss[index] = Math.cos(angle);
    lengths[index] = Math.sqrt((curX-prevX)*(curX-prevX) + (curY-prevY)*(curY-prevY));
    var time = new Date().getTime();
    times[index] = time - prevTime;
    
    variance = 1.0 - Math.sqrt(sum(coss)*sum(coss)+sum(sins)*sum(sins))/sins.length;
    
    direction = Math.atan2(1/sins.length*sum(sins),1/coss.length*sum(coss));
    var speed = sum(lengths)/(sum(times)/200);
    distance = Math.min(Math.max(40, speed), 100);
    prevTime = time;
    index = (index+1)%limit;
}

function drawMice(count){
   ...