canvas绘制波浪

首先咱们先贴出效果出来,这是一个动态的波浪哦!!

html部分:

 <canvas id="Theback" width="320">抱歉您的浏览器不支持canvas!</canvas>

以上的canvas可以根据自己的需要改变他的宽高!!

注:canvas标签中间的内容不会显示在页面上,当浏览器不支持canvas的时候才会显示!!!

 

 

js部分:(一下代码已经是我测试通过的,不需要在修改就可以顺利绘制了!)

 function wavesurRecord() {
        //获取画布
        var beisizer = document.getElementById("Theback");
        var ContenofBeisizer = beisizer.getContext("2d"); //设置波浪海域(海浪宽度,高度)
        var beisizerwidth = beisizer.width;
        var beisizerheight = beisizer.height;
        var beisizerlinewidth = 2;//曲线
        var sinX = 0;
        var sinY = beisizerheight / 2.0;//轴长
        var axisLenght = beisizerwidth;//弧度宽度
        var waveWidth = 0.014;//海浪高度
        var waveHeight = beisizerheight / 15.0;
        var speed = 0.1; //数值越大速率越快
        var xofspeed = 0; //波浪横向的偏移量
        var rand = beisizerheight; //波浪高度

        ContenofBeisizer.lineWidth = beisizerlinewidth;

        // 创建静态的曲线
        var drawSin = function (xofspeed) {
            ContenofBeisizer.save();        //存放贝塞尔曲线的各个点
            var points = [];
            ContenofBeisizer.beginPath();        //创建贝塞尔点
            for (var x = sinX; x < sinX + axisLenght; x += 80 / axisLenght) {
                // var y = -Math.sin((sinX + x) * waveWidth);  //测试请解开注释,注释下一行
                var y = -Math.sin((sinX + x) * waveWidth + xofspeed);
                // points.push([x, sinY + y * waveHeight]); //测试请解开注释,注释下一行
                points.push([x, rand + y * waveHeight]);
                ContenofBeisizer.lineTo(x, sinY + y * waveHeight);  //测试请解开注释,注释下一行
                // ContenofBeisizer.lineTo(x, rand + y * waveHeight);
            }

            ContenofBeisizer.lineTo(axisLenght, beisizerheight);
            ContenofBeisizer.lineTo(sinX, beisizerheight);
            ContenofBeisizer.lineTo(points[0][0], points[0][1]);
            ContenofBeisizer.stroke();
            ContenofBeisizer.restore();       //贝塞尔曲线样式设置
            ContenofBeisizer.strokeStyle = "#3bc777";
            ContenofBeisizer.fillStyle = "#3bc777";
            ContenofBeisizer.fill();
        };

        var rendY = function () {
            ContenofBeisizer.clearRect(0, 0, beisizerwidth, beisizerheight);        //控制海浪高度
            var tmp = 0.1;
            rand -= tmp;
            var b = beisizerheight - rand;
            //控制循环涨潮
            if (parseInt(b) == beisizerheight) {
                rand = beisizerheight;
            }
            drawSin(xofspeed);
            xofspeed += speed;
            requestAnimationFrame(rendY);
        };

        // 动态
        drawSin();
        rendY();


    }

转载于:https://www.cnblogs.com/BLOGZR/p/10365741.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在canvas上实现波浪效果,可以使用正弦函数来模拟波浪的形状,在每一帧中更新波浪的位置和形状,最终绘制波浪的效果。以下是一个简单的示例代码: ```html <canvas id="canvas"></canvas> ``` ```javascript const canvas = document.getElementById('canvas'); const context = canvas.getContext('2d'); // 设置画布大小 canvas.width = window.innerWidth; canvas.height = window.innerHeight; // 波浪参数 const amplitude = 50; const frequency = 0.01; const speed = 0.1; let phase = 0; function draw() { // 清空画布 context.clearRect(0, 0, canvas.width, canvas.height); // 绘制波浪 context.beginPath(); context.moveTo(0, canvas.height / 2); for (let x = 0; x < canvas.width; x++) { const y = canvas.height / 2 + amplitude * Math.sin(phase + frequency * x); context.lineTo(x, y); } context.lineTo(canvas.width, canvas.height); context.lineTo(0, canvas.height); context.closePath(); context.fillStyle = '#0088aa'; context.fill(); // 更新波浪参数 phase += speed; // 在下一帧绘制 requestAnimationFrame(draw); } // 开始绘制 draw(); ``` 在这个示例中,首先设置了画布的大小,并定义了三个参数:振幅(amplitude)、频率(frequency)和速度(speed)。然后在 `draw` 函数中,使用正弦函数来计算每个点的纵坐标,从而绘制波浪的形状。在更新完波浪参数之后,使用 `requestAnimationFrame` 函数来在下一帧绘制波浪。最终得到的效果如下图所示: ![wave](https://user-images.githubusercontent.com/6567390/132350652-5b5a7d79-04b9-4d15-9e1b-dbcfe3729c9d.gif)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值