随笔 - 23,  文章 - 0,  评论 - 3,  阅读 - 21534

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

html部分:

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

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

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

 

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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();
 
 
   }
posted on   ZR的BLOG  阅读(788)  评论(2)    收藏  举报
编辑推荐:
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
阅读排行:
· 精选 4 款免费且实用的数据库管理工具,程序员必备!
· Cursor:一个让程序员“失业”的AI代码搭子
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
· 重生之我是操作系统(七)----内存管理(上)
· .NET 阻止Windows关机以及阻止失败的一些原因

< 2025年4月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10
点击右上角即可分享
微信分享提示