JSFiddle - React, Tailwind, and code Playground

HTML

<canvas id="test" width="500" height="500"></canvas>
<p>先用鼠标在黑板上随意图画一个图形,然后点击click,然后鼠标移动到黑板上通过散落的小球拼出刚才图形,完成之后在clear重新来过</p>
    <button id="ok">click</button>
    <button id="clear">clear</button>

CSS

canvas {
            background-color: #000;
        }

JavaScript

//h=(1/2)gt^2
        var open;
        document.getElementById('ok').onclick = function(){
            open = true;
            arr = [];
            ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
        };
        document.getElementById('clear').onclick = function(){
            open = false;
            arr = drawArr = [];
            ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
        };
        var canvas = document.getElementById('test');
        var ctx = canvas.getContext('2d');
        var g = 0.1;
        var h = 60;
        var w = 60;
        var vx = 1;
        var vy = -2;
        var time = 0;
        var r = 8;
        var arr = [];//JSON.parse(localStorage.getItem('xxxx'));
        const colors = ["#33B5E5","#0099CC","#AA66CC","#9933CC","#99CC00","#669900","#FFBB33","#FF8800","#FF4444","#CC0000"];
        var date = Date.now();
        var flag;
        var drawArr = [];
        document.getElementById('test').addEventListener('mousedown', function(e){
            
            flag = true;
        });
        document.getElementById('test').addEventListener('mouseup', function(e){
            
            flag = false;
        });
        document.getElementById('test').addEventListener('mousemove', function(event){
            if (!open) {
                if (!flag) return;
                
                var rect = event.currentTarget.getBoundingClientRect();
                var gravityPoint = {
                    x: event.clientX - rect.left,
                    y: event.clientY - rect.top
                  };
                  circle(gravityPoint.x,gravityPoint.y,r,'#fff');
                  drawArr.push({
                    w:gravityPoint.x,
                    h:gravityPoint.y,
                    vx:0,
                    vy:0,
                    g:0,
                    color:'#fff'
                  });
                  //localStorage.setItem('xxxx',JSON.stringify(drawArr));
              } else {
            ...