js实现canvas菱形变换背景动画效果代码

代码语言:html

所属分类:背景

代码描述:js实现canvas菱形变换背景动画效果代码

代码标签: 菱形 变换 背景 动画 效果

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

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>

<style>
body
{margin: 0;}
</style>

</head>
<body style="overflow:hidden">

<div></div>

<script>

var Voronoi = Voronoi || {};

(function(Voronoi) {

        // requestAnimationFrame shim
        var i = 0,
                lastTime = 0,
                vendors = ['ms', 'moz', 'webkit', 'o'];

        while (i < vendors.length && !window.requestAnimationFrame) {
                window.requestAnimationFrame = window[vendors[i] + 'RequestAnimationFrame'];
                window.cancelAnimationFrame = window[vendors[i] + 'CancelAnimationFrame'] || window[vendors[i] + 'CancelRequestAnimationFrame'];
                i++;
        }

        if (!window.requestAnimationFrame) {
                window.requestAnimationFrame = function(callback, element) {
                        var currTime = new Date().getTime(),
                                timeToCall = Math.max(0, 1000 / 60 - currTime + lastTime),
                                id = setTimeout(function() { callback(currTime + timeToCall); }, timeToCall);

                        lastTime = currTime + timeToCall;
                        return id;
                };
        }

        if (!window.cancelAnimationFrame) {
                window.cancelAnimationFrame = function(id) {
                        clearTimeout(id);
                };
        }

        Array.prototype.each = function(f) {
                var i = this.length;
                while (i--) {
                        f(this[i]);
                }
        };

        function Edge() {
                this.data;
                this.next;
                this.rot;
        }

        Edge.prototype.splice = function(e) {
                var e1 = this.next.rot,
                        e2 = e.next.rot,
                        e3 = this.next;

                this.next = e.next;
                e.next = e3;

                e3 = e1.next;
                e1.next = e2.next;
                e2.next = e3;
        };

        Edge.prototype.swap = function() {
                var e0 = this.oPrev(),
                        e1 = this.sym().oPrev();

                this.splice(e0);
                this.sym().splice(e1);
                this.splice(e0.lNext());
                this.sym().splice(e1.lNext());
                this.setOrg(e0.dest());
                this.setDest(e1.dest());
        };

        Edge.prototype.sym = function() {
                return this.rot.rot;
        };

        Edge.prototype.iRot = function() {
                return this.rot.rot.rot;
        };

        Edge.prototype.org = function(v) {
                return this.data;
        };

        Edge.prototype.setOrg = function(v) {
                this.data = v;
        };

        Edge.prototype.dest = function() {
                return this.rot.rot.data;
        };

        Edge.prototype.setDest = function(v) {
                this.rot.rot.data = v;
        };

        Edge.prototype.setOrgDest = function(o, d) {
                this.setOrg(o);
                this.setDest(d);
        };

        Edge.prototype.left = function() {
                return this.rot.rot.rot.data;
        };

        Edge.prototype.setLeft = function(v) {
                this.rot.rot.rot.data = v;
        };

        Edge.prototype.right = function() {
                return this.rot.data;
        };

        Edge.prototype.setRight = function(v) {
                this.rot.data = v;
        };

        Edge.prototype.oNext = function() {
                return this.next;
        };

        Edge.prototype.rNext = function() {
                return this.rot.next.rot.rot.rot;
        };

        Edge.prototype.dNext = function() {
                return this.rot.rot.next.rot.rot;
        };

        Edge.prototype.lNext = function() {
                return this.rot.rot.rot.next.rot;
        };

        Edge.prototype.oPrev = function() {
                return this.rot.next.rot;
        };

        Edge.prototype.rPrev = function() {
                return this.rot.rot.next;
        };

        Edge.prototype.dPrev = function() {
                return this.rot.rot.rot.next.rot.rot.rot;
        };

        Edge.prototype.lPrev = function() {
                return this.next.rot.rot;
        };

        Edge.prototype.leftVertex = function(v) {
                return isLeftOf(v, this.org(), this.dest());
        };

        Edge.prototype.rightVertex = function(v) {
                return isRightOf(v, this.org(), this.dest());
        };

        Edge.prototype.colinearVertex = function(v) {
                return colinear(v, this.org(), this.dest());
        };


        function Vertex(x, y) {
                this.x = x;
                this.y = y;
                this.vx = 0;
                this.vy = 0;
                this.cell = 0;
                this.isInfinity = false;
        }

        Vertex.prototype.equals = function(v) {
                return this.x === v.x && this.y === v.y;
        };


        var context,
                viewHomeDiv,
                viewOuterDiv,
                boundary = 25,
                canvasWidth,
                canvasHeight,
                totalVertices = 70,
                maxSpeed = 3,
                vertices = [],
                r,
                g,
                b,
                ri,
                gi,
                bi,
                loopID = 0,
                rot_map = [1, 2, 3, 0],
                next_map = [0, 3, 2, 1],
                edge,
                edges = [],
                circumcenters = [],
                edgeVertices = [new Vertex(0, -5000), new Vertex(-10000, 5000), new Vertex(10000, 5000)],
                maxIterations = 200,
    followDist = 200,
                stirDist = 50,
    mouseX,
    mouseY,
    oldMouseX = 0,
    oldMouseY = 0;

        function inCircle(v0, v1, v2, v3) {
                var circle_test = (v2.x - v1.x) * (v3.y - v1.y) * (v0.x * v0.x + v0.y * v0.y.........完整代码请登录后点击上方下载按钮下载查看

网友评论0