H5,雨滴效果2

代码如下:

<!DOCTYPE html>
<html>
 <head>
  <title> ... </title>
  <meta charset="utf-8"/>
  <meta name="HSW" content="">
  <meta name="Keywords" content="">
  <style>
    canvas {
        position: absolute;
        top: 0;
        left: 0;
    }
  </style>
 </head>

 <body>
  <canvas id=c></canvas>
 </body>
 <script>
    var w = c.width = window.innerWidth,
    h = c.height = window.innerHeight,
    ctx = c.getContext('2d'),

    opts = {

        count: w / 10,
        baseSize: 1,
        addedSize: 2,
        velX: 1,
        velY: 4,
        framesBack: 8, //control the drop line higher portion
        framesFront: 4 //control the drop line lower portion
    },

    drops = [];

function anim() {

    window.requestAnimationFrame(anim);

    ctx.fillStyle = '#222';
    ctx.fillRect(0, 0, w, h);
    ctx.strokeStyle = '#eee';

    if (drops.length < opts.count)
        drops.push(new Drop);

    drops.map(function(drop) {
        drop.step();
    });
}

function Drop() {

    this.x = (Math.random() * w) | 0;
    this.y = 0;

    this.size = opts.baseSize + opts.addedSize * Math.random();

    this.vx = opts.velX * this.size;
    this.vy = opts.velY * this.size;
}
Drop.prototype.step = function() {

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

    if (this.x - opts.framesBack * this.vy > w)
        this.x = -opts.framesFront * this.vy;

    if (this.y - opts.framesBack * this.vy > h)
        this.y = -opts.framesFront * this.vy;

    var x = this.x - opts.framesBack * this.vx,
        y = this.y - opts.framesBack * this.vy;

    for (var i = 1; i < opts.framesBack; ++i) {

        ctx.lineWidth = i / opts.framesBack * this.size;

        ctx.beginPath();
        ctx.moveTo(x, y);

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

        ctx.lineTo(x, y);
        ctx.stroke();
    }
    for (var i = 0; i < opts.framesFront; ++i) {

        ctx.lineWidth = this.size - i / opts.framesFront * this.size;

        ctx.beginPath();
        ctx.moveTo(x, y);

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

        ctx.lineTo(x, y);
        ctx.stroke();
    }
}
anim();
window.addEventListener('resize', function() {

    w = c.width = window.innerWidth;
    h = c.height = window.innerHeight;
})
 </script>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值