So let’s cut to the code

<! DOCTYPE HEML PUBLIC> <html> <head> <meta charset="utf-8"> <style> html, body { width: 100%; height: 100%; margin: 0; padding: 0; border: 0; } div { margin: 0; padding: 0; border: 0; } .nav { position: absolute; top: 0; left: 0; width: 100%; height: 27px; background-color: white; color: black; text-align: center; line-height: 25px; } a { color: black; text-decoration: none; border-bottom: 1px dashed black; } a:hover { border-bottom: 1px solid red; } .previous { float: left; margin-left: 10px; } .next { float: right; margin-right: 10px; } .green { color: green; } .red { color: red; } textarea { width: 100%; height: 100%; border: 0; padding: 0; margin: 0; padding-bottom: 20px; } .block-outer { float: left; width: 22%; height: 100%; padding: 5px; border-left: 1px solid black; margin: 30px 3px 3px 3px; } .block-inner { height: 68%; } .one { border: 0; } </style> </head> <body marginwidth="0" marginheight="0"> <canvas id="c" height="356" width="446"> <script> var collapsed = true; function toggle() { var fs = top.document.getElementsByTagName('frameset')[0]; var f = fs.getElementsByTagName('frame'); if (collapsed) { fs.rows = '250px,*'; fs.noResize = false; f[0].noResize = false; f[1].noResize = false; } else { fs.rows = '30px,*'; fs.noResize = true; f[0].noResize = true; f[1].noResize = true; } collapsed = ! collapsed; } </script> <script> var b = document.body; var c = document.getElementsByTagName('canvas')[0]; var a = c.getContext('2d'); document.body.clientWidth; </script> <script> M=Math; Q=M.random; J=[]; U=16; T=M.sin; E=M.sqrt; for(O=k=0; x=z=j=i=k<200;) with(M[k]=k? c.cloneNode(0):c) { width=height=k? 32:W=446; with(getContext('2d')) if(k>10|! k) for( font='60px Impact', V='rgba('; I=i*U,fillStyle=k? k==13? V + '205205215, 15) : (147 + I) + V +', '+ (% 2 k? 128+I:0)+','+I+',.5)':'#cca',i<7; ) beginPath( fill( arc( U-i/3, 24-i/2, k==13? 4-(I ++)/2 -(I ++), 0, m. PI*2,1)); else for(; X = T (I), y = Q () * 2-1, x + y = x * * y D, B = E (D - x /. 9-1.5 * y + 1), R = 67 * (B + 1) * (L = k / 9 +. 8) > > 1, i++ < W;) if(D<1) beginPath( strokeStyle=V+R+','+(R+B*L>>0)+',40,.1)' ), moveTo(U+x*8,U+y*8), lineTo(U+x*U,U+y*U), stroke(); for( y=H=k+E(k++)*25, R=Q()*W; P=3,j<H; ) J[O++]=[x+=T(R)*P+Q()*6-3,y+=Q()*U-8,z+=T(R-11)*P+Q()*6-3,j/H*20+((j+=U)>H&Q()>.8?Q(P=9)*4:0)>>1] } setInterval(function  G(m,l) { A=T(D-11); if(l) return( m[2]-l[2])*A+(l[0]-m[0])*T(D); A.c learRect (0, 0, W, W); J.sort(G); for( i=0; L=J[i++]; a.drawImage ( M[L[3]+1],207+L[0]*A+L[2]*T(D)>>0,L[1]>>1) ) { if(i==2e3) a.fillText ( 'Happy Christmas! ', U,345); if(! (i%7)) a.drawImage ( M[13], ((157*(i*i)+T(D*5+i*i)*5)%W)>>0, ((113*i+(D*i)/60)%(290+i/99))>>0 ); } D+=.02 },1) </script> </body> </html>Copy the code

Wait, wait, wait. How do trees add music

 <audio src="music/music.mp3" autoplay="autoplay" loop="loop"></audio>
Copy the code

Ok, done