手写particles

Posted Grewer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写particles相关的知识,希望对你有一定的参考价值。

 var canvas = document.getElementById(‘canvas‘);
    var ctx = canvas.getContext(‘2d‘);

    var Grewer = {
        init: function() {
            this.getWindowSize();
            canvas.width = this.w;
            canvas.height = this.h;
            this.num = 50;
            this.range = 100;
            this.arr = [];
            this.add();

        },
        getWindowSize: function() {
            //获取窗口宽度
            if (window.innerWidth) { //兼容火狐,谷歌,safari等浏览器
                this.w = window.innerWidth;
            } else if ((document.body) && (document.body.clientWidth)) { //兼容IE浏览器
                this.w = document.body.clientWidth;
            }

            //获取窗口高度
            if (window.innerHeight) {
                this.h = window.innerHeight;
            } else if ((document.body) && (document.body.clientHeight)) {
                this.h = document.body.clientHeight;
            }
        },
        update: function(obj) {
            obj.x += obj.vx;
            obj.y += obj.vy;

            if (obj.x < 0 || obj.x > this.w) {
                obj.vx *= -1;
            }
            if (obj.y < 0 || obj.y > this.h) {
                obj.vy *= -1;
            }
        },
        add: function() {

            var i = this.num;
            while (i--) {
                var particles = {
                    x: (Math.random() * this.w) | 0,
                    y: (Math.random() * this.h) | 0,
                    vx: (Math.random() - .5) * 1,
                    vy: (Math.random() - .5) * 1,
                }
                this.arr.push(particles);
            }
        },
        checkDist: function(a, b, dist) {
            var x = a.x - b.x,
                y = a.y - b.y;

            return x * x + y * y <= dist * dist;
        },
        print: function(obj) {
            ctx.beginPath();
            ctx.arc(obj.x, obj.y, 2, 0, 2 * Math.PI);
            ctx.fillStyle = ‘#ddd‘;
            ctx.fill();
        }


    }
    var G = Object.create(Grewer);
    G.init();
    var Ganim = function() {
        window.requestAnimationFrame(Ganim);

        ctx.fillStyle = ‘#fff‘;
        ctx.fillRect(0, 0, G.w, G.h);

        var length = G.num;
        for (var i = 0; i < length; i++) {
            var o1 = G.arr[i]
            G.update(o1);
            G.print(o1);

            for (var j = i + 1; j < length; ++j) {

                var o2 = G.arr[j];
                if (G.checkDist(o1, o2, G.range)) {
                    ctx.strokeStyle = ‘#ddd‘;
                    ctx.beginPath();
                    ctx.moveTo(o1.x, o1.y);
                    ctx.lineTo(o2.x, o2.y);
                    ctx.stroke();
                }
            }

        }
    }
    Ganim();

 也可以全屏观看:http://en.jsrun.net/nWiKp/show

 

以上是关于手写particles的主要内容,如果未能解决你的问题,请参考以下文章

前端面试题之手写promise

particle云架构代码结构

particle云架构代码结构

spring cloud - particle云架构代码结构

整合 particle云架构代码结构构建

Vue 动态粒子特效(vue-particles)