js实现瀑布动画效果

代码语言:html

所属分类:动画

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

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

    <title> - Canvas Waterfall</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
    <style>
        body {
            background: #222;
        }

        #container {
            box-shadow: inset 0 1px 0 #444, 0 -1px 0 #000;
            height: 140px;
            left: 50%;
            margin: -70px 0 0 -60px;
            position: absolute;
            top: 50%;
            width: 120px;
        }

        canvas {
            display: block;
            margin: 0 auto;
        }
    </style>

</head>
<body translate="no">
    <div id="container">
        <canvas id="waterfall"></canvas>
    </div>

    <script src='http://repo.bfw.wiki/bfwrepo/js/jquery.17.js'></script>
    <script>
        var waterfallCanvas = function (c, cw, ch) {

            var _this = this;
            this.c = c;
            this.ctx = c.getContext('2d');
            this.cw = cw;
            this.ch = ch;

            this.particles = [];
            this.particleRate = 6;
            this.gravity = .15;


            this.init = function () {
                this.loop();
            };

            this.reset = function () {
                this.ctx.clearRect(0, 0, this.cw, this.ch);
                this.particles = [];
            };

            this.rand = function (rMi, rMa) {
                return ~~(Math.random() * (rMa - rMi + 1) + rMi);
            };


            this.Particle = function () {
                var newWidth = _this.rand(1, 20);
                var newHeight = _this.rand(1, 45);
                this.x = _this.rand(10 + newWidth / 2, _this.cw - 10 - newWidth / 2);
                this.y = -newHeight;
                this.vx = 0;
                this.vy = 0;
                this.width = newWidth;
                this.height = newHeight;
                this.hue = _this.rand(200, 220);
                this.saturation = _this.rand(30, 60);
                this.lightness = _this.rand(30, 60);
            };

            this.Particle.prototype.update = function (i) {
                this.vx += this.vx;
                this.vy += _this.gravity;
                this.x += this.vx;
                this.y += this.vy;
            };

            this.Particle.prototype.render = function () {
                _this.ctx.strokeStyle = 'hsla(' + this.hue + ', ' + this.saturation + '%, ' + this.lightness + '%, .05)';
                _this.ctx.beginPath();
                _this.ctx.moveTo(this.x, this.y);
                _this.ctx.lineTo(this.x, this.y + this.height);
                _this.ctx.lineWidth = this.width / 2;
                _this.ctx.lineCap = 'round';
                _this.ctx.stroke();
            };

            this.Particle.prototype.renderBubble = function () {
                _this.ctx.fillStyle = 'hsla(' + this.hue + ', 40%, 40%, 1)';
                _this.ctx.fillStyle = 'hsla(' + this.hue + ', ' + this.saturation + '%, ' + this.lightness + '%, .3)';
                _this.ctx.beginPath();
                _this.ctx.arc(this.x + this.width / 2, _this.ch - 20 - _this.rand(0, 10), _this.rand(1, 8), 0, Math.PI * 2, false);
                _this.ctx.fill();
            };

            this.createParticles = function () {
           .........完整代码请登录后点击上方下载按钮下载查看

网友评论0