在前面简单讲述了一下HTML里的Canvas,这次根据Canvas完成了“海浪效果”(水波上升)。

(O(∩_∩)O哈哈哈~作者我能看这个动画看一下午)

上升水波.gif动画分析

构成:贝塞尔曲线

画布:Canvas

效果:波浪涨潮(上升、波动)

触发条件:点击按钮

贝塞尔曲线.gif

算法实现分析:从sin()函数切入,sin()越大波度起伏越大,简单说就是通过不断改变sin()值来实现海浪效果动画

干货开始:

1、创建触发条件(按钮)

οnclick="Beisizer()"//点击时触发JS事件

οnmοuseοver="bcd()"//鼠标经过时JS事件

οnmοuseleave="out()"//鼠标离开时JS事件

id="Anniu">确 &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp 定

2、创建画布Canvas

3、创建JS事件(属性设置)//获取画布

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;

ContenofBeisizer.lineWidth = beisizerlinewidth;

4、画贝塞尔曲线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 y = -Math.sin((sinX+x)*waveWidth);

points.push([x,rand+y*waveHeight]);

var y = -Math.sin((sinX+x)*waveWidth+xofspeed);

运行方法执行 drawSin()

静态贝塞尔曲线.png

5、海浪效果的实现

需要在属性中加入一下代码进行速率的设置

var speed = 0.1; 数值越大速率越快

var xofspeed = 0; 波浪横向的偏移量

var rand = beisizerheight;波浪高度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);

drawSinl(xofspeed);

xofspeed += speed;

requestAnimationFrame(rendY);

};

通过调用自身产生不同的高度,来产生海浪效果。这里设置的属性值配合第四步画贝塞尔曲线一起进行理解。

运行方式 rendY();

总结

贝赛尔曲线也可以制作音波,心跳仪等。可以尝试改变频率值来实现。

【相关推荐】

1. 免费h5在线视频教程

2. HTML5 完整版手册

3. erdangjiade.com原创html5视频教程

html5简单制作效果,分享一个利用HTML5制作的海浪效果代码-H5教程相关推荐

  1. html5实现贪吃蛇,分享一个用html5实现的贪吃蛇特效代码

    本篇小编为大家分享一个用html5实现的简单贪吃蛇特效代码,喜欢的小伙伴们可以看一下 Snake //内置大量BUG,I'm sorry. var lev=100; //定时器间隔时间 var num ...

  2. html5 海浪,分享一个利用HTML5制作的海浪效果代码

    在前面简单讲述了一下HTML里的Canvas,这次根据Canvas完成了"海浪效果"(水波上升). (O(∩_∩)O哈哈哈~作者我能看这个动画看一下午) 上升水波.gif动画分析 ...

  3. html贪吃蛇自动走,分享一个用html5实现的贪吃蛇特效代码

    本篇小编为大家分享一个用html5实现的简单贪吃蛇特效代码,喜欢的小伙伴们可以看一下 Snake //内置大量BUG,I'm sorry. var lev=100; //定时器间隔时间 var num ...

  4. python制作阴阳师脚本_利用python制作一个阴阳师小游戏

    利用python制作一个阴阳师小游戏 发布时间:2020-11-27 13:59:49 来源:亿速云 阅读:84 这期内容当中小编将会给大家带来有关利用python制作一个阴阳师小游戏,文章内容丰富且 ...

  5. 分享一个python采集中国福利彩票的小代码

    分享一个python采集中国福利彩票的小代码 分享一个python采集中国福利彩票的小代码 能采集双色球,七乐彩,3D彩票任意一段时间的开奖号码,根据需求取消请求头注释,就能采集数据.(初学者请勿评价 ...

  6. html5实现粒子效果的文字,利用HTML5实现Canvas粒子文字特效

    特效描述:利用HTML5实现 Canvas 粒子文字特效.利用HTML5实现Canvas粒子文字特效 代码结构 1. HTML代码 change /*jshint esversion:6*/ var ...

  7. 苹果手机html5摇一摇游戏戏码,利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖,html5devicemotion...

    利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖,html5devicemotion 摇一摇JS脚本逻辑: 接下来是移动端JS脚本逻辑的实现,摇一摇的实现需借助html5新增的 ...

  8. html5如何写出圆背景,利用HTML5实现Canvas虚幻圆点背景特效

    特效描述:利用HTML5实现 Canvas 虚幻圆点 背景特效.利用HTML5实现Canvas虚幻圆点背景特效 代码结构 1. 引入JS 2. HTML代码 (function($){ var can ...

  9. html5 可旋转的三维树形结构,利用HTML5实现勾股树植物生长动画特效

    特效描述:利用HTML5实现 勾股树 植物生长 动画特效.利用HTML5实现勾股树植物生长动画特效 代码结构 1. HTML代码 const canvas = document.querySelect ...

最新文章

  1. 带毫秒的字符转换成时间(DateTime)格式的通用方法
  2. 三巨头垄断全球农业-丰收节贸易会:世界最大种子农药公司
  3. ubuntu下的各种环境变量
  4. 牛气!.NET5电商平台轻松承接10亿GMV,只因做对了这个!
  5. oracle中右表有过滤条件的left outer join
  6. NAS、DAS和SAN三种存储究竟是什么?
  7. 随想录(udp经验总结)
  8. 详解 Spring 3.0 基于 Annotation 的依赖注入实现(转)
  9. 爱不意味这“sorry”
  10. eweishop 人人商城区别_微擎开发之人人商城添加第三方支付系列
  11. 谈谈研发PLM项目管理
  12. 捕获javaw的输出
  13. [从零开始A31S]之安装虚拟机以及下载ubuntu
  14. python爬取微信好友教程_Python爬取微信好友
  15. ae合成设置快捷键_ae技巧,使用ae实用小技巧
  16. [设计模式] 调停者模式(Mediator Pattern)
  17. 什么是显示器支架,显示器支架有啥优势
  18. CPA十二--期末汇兑损益的处理(转载)
  19. POCO C++ 在IOS上的使用
  20. 三维建模思路培养——复古风书房建模

热门文章

  1. SSRF 漏洞学习实战
  2. php 上传文件 type,php 上传文件 $_FILES[\'\'][\'type\']的值-wwwkljoel-ChinaUnix博客
  3. 联登捷径物业管理系统方案,智慧物业发展未来-捷径体系
  4. 梦见老同学,及李娜夺冠
  5. 【46】SSD硬盘(上):如何完成性能优化的KPI?
  6. 计算机组装与维修595题,计算机组装、维护与维修
  7. 电荷密度波的嵌套理论和电声子耦合理论
  8. C语言scanf连续输入两个字符
  9. 数据可视化分析教学课件——FineBI实验册节选====风险分析
  10. 解决在高分屏电脑上运行Photoshop CS6,程序界面字体过小的问题