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

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();
}