【js】canvas——Atomic-particle-motion

原子粒动
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas动画</title>
    <style>
        body{
            background-color:#000000;
        }
        canvas{
            display: block;
            position: absolute;
            top:0;
            left:0;
            -webkit-box-shadow: inset 0 0 100px #69f;
            -moz-box-shadow: inset 0 0 100px #69f;
            box-shadow: inset 0 0 100px #69f; ;
        }
    </style>
</head>
<body>
<canvas id="canvas"></canvas>
<script type="text/javascript">
    var canvas=document.getElementById("canvas");
        cxt=canvas.getContext("2d");
        w = 500;
        h = 500;
        partical = 100;//原子数量
        particals = [];
        colors = ["#FFFF00","#FFBBFF","#346945","#FF7F00","#FF3030","#EEEE00","#98FB98","#7EC0EE","#7D26CD","#458B74"];
        canvas.width = w;
        canvas.height = h;
        aW = window.innerWidth;
        aH = window.innerHeight;
    canvas.style.left = (aW-w)/2+"px";
    canvas.style.top = (aH-h)/2+"px";
    function FC(){
        this.x = Math.round(Math.random()*w);//x
        this.y = Math.round(Math.random()*h);//y
        this.rad = Math.round(Math.random()*5)+5;//rad
        this.rgba = colors[Math.round(Math.random()*10)];
        this.vx = Math.round(Math.random()*3)-1.5;
        this.vy = Math.round(Math.random()*3)-1.5;
    }
    function draw(){
        cxt.clearRect(0,0,w,h);
        for(var i=0;i<partical;i++){
            var p = particals[i];
            for(var j=0;j<partical;j++){
                var pp = particals[j];
                if(p.rgba == pp.rgba && findDistance(p,pp)<50){
                    cxt.strokeStyle = p.rgba;
                    cxt.moveTo(p.x, p.y);
                    cxt.lineTo(pp.x,pp.y);
                    cxt.stroke();
                }
            }
            cxt.beginPath();
            cxt.fillStyle= p.rgba;
            cxt.arc(p.x, p.y, p.rad,0,Math.PI*2,true);
            cxt.fill();
            cxt.closePath();
            cxt.beginPath();
            cxt.strokeStyle= p.rgba;
            cxt.arc(p.x, p.y, p.rad+20,0,Math.PI*2,true);
            cxt.stroke();
            cxt.closePath();
        }
        upData()
    }
    function upData(){
        for(var i=0;i<partical;i++){
            var p = particals[i];
            p.x += p.vx;
            p.y += p.vy;
            if(p.x>w)p.x=0;
            if(p.x<0)p.x=w;
            if(p.y>h)p.y=0;
            if(p.y<0)p.y=h;
        } 
   } 
   function findDistance(p1,p2){
        return Math.sqrt(Math.pow(p2.x-p1.x,2)+Math.pow(p2.y-p1.y,2));
    }
    (function int(){
        for(var i=0;i<partical;i++){
            particals.push(new FC)
        }
    })();
setInterval(draw,15)
</script>
</body>
</html>


 
原文地址:https://www.cnblogs.com/suming1016/p/5404205.html