链式反射特效

代码语言:html

所属分类:动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">
<head>
   
<meta charset="UTF-8">

   
<title> chain reaction</title>
   
<style>
        body
{
           
font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif;
           
background-color: #000;
           
margin: 0;
           
padding: 0;
           
border-width: 0;
       
}
   
</style>

</head>
<body translate="no">

   
<script>
        window.addEventListener("load", function () {

            const gridStep = 40; // grid step (distance between atoms - center to center)
            const radiusToStepRatio = 0.3; // radius to step ratio, didn't guess ? < 0.5
            const activity = 3; // maximum number of atoms destroyed by one particle

            const atomRadius = gridStep * radiusToStepRatio;

            let canv, ctx; // canvas and drawing context for atoms
            let canvP, ctxP; // canvas and drawing context for particles

            let maxx, maxy; // canvas size

            let orgx, orgy; // position of the center of top left atom

            let nbx, nby; // nb of atoms horiz. / vert.
            let crystal; // matrix of atoms

            let explosions; // table of disintegrations to come / in progress
            let endsOfExplosion; // list of elements to be removed from explosions
            let requestID; // to cancel animation in progress
            let lRay; // maximum length for particle path
            let nbEff = 0;
            // shortcuts for Math functions

            const mrandom = Math.random;
            const mfloor = Math.floor;
            const mround = Math.round;
            const mceil = Math.ceil;
            const mtrunc = Math.trunc;
            const mabs = Math.abs;
            const mmin = Math.min;
            const mmax = Math.max;

            const mPI = Math.PI;
            const mPIS2 = Math.PI / 2;
            const m2PI = Math.PI * 2;
            const msin = Math.sin;
            const mcos = Math.cos;
            const matan2 = Math.atan2;

            const mhypot = Math.hypot;
            const msqrt = Math.sqrt;

            //-----------------------------------------------------------------------------
            // miscellaneous functions
            //-----------------------------------------------------------------------------

            function alea(min, max) {
                /* random float min..max
                             or 0..min if max is undefined
                           min and max are supposed to be numbers, max (if provided) > min
                           */
                if (typeof max == 'undefined') return min * mrandom();
                return min + (max - min) * mrandom();
            } // alea

            // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

            function intAlea(min, max) {
                /*
                                with 2 parameters :
                                  returns random integer min..max - 1
            .........完整代码请登录后点击上方下载按钮下载查看

网友评论0