canvas粒子碰撞运动特效

代码语言:html

所属分类:粒子

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

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

   
<script>
        window
.requestAnimFrame = (function() {
           
return (
                window
.requestAnimationFrame ||
                window
.webkitRequestAnimationFrame ||
                window
.mozRequestAnimationFrame ||
                window
.oRequestAnimationFrame ||
                window
.msRequestAnimationFrame ||
               
function(callback) {
                    window
.setTimeout(callback);
               
}
           
);
       
});

       
function init(elemid) {
            let canvas
= document.getElementById(elemid),
            c
= canvas.getContext("2d"),
            w
= (canvas.width = window.innerWidth),
            h
= (canvas.height = window.innerHeight);
            c
.fillStyle = "rgba(30,30,30,1)";
            c
.fillRect(0, 0, w, h);
           
return {
                c
: c,
                canvas
: canvas
           
};
       
}
   
</script>
   
<style>
        body
,
        html
{
           
margin: 0px;
           
padding: 0px;
           
position: fixed;
           
background: rgb(30,30,30);
           
filter: contrast(3);
       
}

        canvas
{
           
filter: blur(3px);
       
}
   
</style>

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

   
<script>
        window.onload = function () {
            let c = init("canvas").c,
            canvas = init("canvas").canvas,
            w = canvas.width = window.innerWidth,
            h = canvas.height = window.innerHeight,
            mouse = {
                x: w / 2,
                y: h / 2
            },
            last_mouse = {};

            //initiation

            function dist(p1, p2) {
                return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));
            }

            class particle {
                constructor() {
                    this.a = Math.random() * 2 * Math.PI;
                    this.r = Math.random() * 50;
                    this.x0 = w / 2 + this.r * Math.cos(this.a);
                    this.y0 = h / 2 + this.r * Math.sin(this.a);
                    this.ang = Math.random() * (2 * Math.PI);
                    this.col = "white";
                    this.s = 10;
                    this.g = G;
                }
                hit(arr) {
                    this.f0 = this.f;
                    for (let i = 0; i < arr.length; i++) {
                        if (dist(this, arr[i]) < this.s + arr[i].s) {
                            this.f -= this.f0 + arr[i].f;
                        }
                    }
                }
                move() {
                    this.vx += this.ax * t;
                    this.vy += this.ay * t;

                    this.vx *= friction;
                    this.vy *= friction;

                    this.x += this.vx * t;
                    this.y += this.vy * t;

                    this.ax = 0;
                    this.ay = 0;
                    this.f = 0;
                }
                edges() {
                    if (this.x <= this.s) {
                        this.x = 0;
                        this.vx *= -friction;
                    }
                    if (this.x >= w - this.s) {
                        this.x = w;
                        this.vx *= -friction;
                    }
                    if (this.y >= h - this.s) {
                        this.y = h;
                        this.vy *= -friction;
                    }
                    if (this.y <= this.s) {
                        this.y = 0;
                        this.vy *= -friction;
                    }
                }
                show() {
                    c.beginPath();
                    //c.arc(this.x,this.y,this.s,0,2*Math.PI);
                    c.rect(this.x, this.y, this.s, this.s);
    .........完整代码请登录后点击上方下载按钮下载查看

网友评论0