canvas 水流波纹

11 篇文章 0 订阅
<canvas id="canvas" width="1912" height="150"></canvas>

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

    canvas.width = canvas.parentNode.offsetWidth;
    canvas.height = 150;

    window.requestAnimFrame = (function(){
        return window.requestAnimationFrame  ||
            window.webkitRequestAnimationFrame ||
            window.mozRequestAnimationFrame ||
            function( callback ){
                window.setTimeout(callback, 1000 / 60);
            };
    })();

    var boHeight = canvas.height / 2.4;
    var posHeight = canvas.height / 1.2;
    var step = 0;
    var lines = ["rgba(208,215,220, 0.2)", "rgba(208,215,220, 0.2)", "rgba(208,215,220, 0.2)"];

    function loop(){
        ctx.save();

        ctx.clearRect(0,0,canvas.width,canvas.height);
        step++;

        for(var j = lines.length - 1; j >= 0; j--) {
            ctx.fillStyle = lines[j];
            var angle = (step+j*150)*Math.PI/180;
            var deltaHeight = Math.sin(angle) * boHeight;
            var deltaHeightRight = Math.cos(angle) * boHeight;
            ctx.beginPath();
            ctx.moveTo(0, posHeight+deltaHeight);
            ctx.bezierCurveTo(canvas.width/2, posHeight+deltaHeight-boHeight, canvas.width / 2, posHeight+deltaHeightRight-boHeight, canvas.width, posHeight+deltaHeightRight);
            ctx.lineTo(canvas.width, canvas.height);
            ctx.lineTo(0, canvas.height);
            ctx.lineTo(0, posHeight+deltaHeight);
            ctx.closePath();
            ctx.fill();
        }
        
        ctx.restore();
        requestAnimFrame(loop);
    }
    loop();

    $(window).on('resize', function(){
        canvas.width = canvas.parentNode.offsetWidth;
    });
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

℡╮荆棘鸟゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值