JSFiddle - React, Tailwind, and code Playground

HTML

<canvas id = "canvas"></canvas>

JavaScript

window.addEventListener('resize', resize);
var canvas = document.getElementById('canvas'); //canvas的dom对象
var ctx = canvas.getContext('2d');        //上下文
var center;//显示界面canvas画布半径/中心
var canvasSnow;//基础雪花图案
var snowNum = 1;
var isAdd = true;
resize();

function resize(){
  var SCREEN_W = window.innerWidth          //获取屏幕宽度
  canvas.setAttribute('width', SCREEN_W * 2)    //以屏幕宽度为宽画图
  canvas.setAttribute('height', SCREEN_W * 2)
  canvas.style.width = SCREEN_W + 'px';
  canvas.style.height = SCREEN_W + 'px';
  ctx.lineWidth = 2;//1px细线,画布尺寸为其两倍
  center = SCREEN_W;
  ctx.translate(center, center);
  
  snowNum = 6;
  //drawCanvas();
  var loop = setInterval(
  function(){
  drawCanvas()
  }
  , 10);
}
function drawCanvas(){
  var rSnow = center/2 * (snowNum - 6)/6;
  canvasSnow = drawCanvasSnow(rSnow);
  ctx.clearRect(-center, -center, center * 2, center * 2);
  for(var i = 0; i < snowNum; i++){
    drawSnowAngle(ctx, center - rSnow, i/snowNum, rSnow * 2);
  }
  if(snowNum >= 18){isAdd = false;}
  else if(snowNum <= 1){isAdd = true;}
  if(isAdd){snowNum += snowNum/200;}
  else{snowNum -= snowNum/100;}
}
function drawSnowAngle(ctx,r,angle,size){
  ctx.save();
  ctx.rotate(Math.PI*2 * angle);
  drawLine(ctx,0,0,r,0,"#656565");
  ctx.drawImage(canvasSnow, 0, 0, canvasSnow.width, canvasSnow.height,
    r - size/2, -size/2, size, size);
  ctx.restore();
}

function drawCanvasSnow(centerSnow){
  var canvasSnow = document.createElement('canvas');
  var ctxSnow = canvasSnow.getContext('2d');
  canvasSnow.setAttribute('width', centerSnow * 2);
  canvasSnow.setAttribute('height', centerSnow * 2);
  var canvasSingleSnow = function(snowSize){
    var singleSnow = document.createElement('canvas');
    var ctxSingle = singleSnow.getContext('2d');
    singleSnow.setAttribute('width', snowSize * 2);
    singleSnow.setAttribute('height', snowSize * 2);
    ctxSingle.translate(snowSize, snowSize);
    for(var i = 0; i < 6; i++){
      ctxSingle.save();
     ...