在前面简单讲述了一下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();

总结

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

【相关推荐】

html5 海浪,分享一个利用HTML5制作的海浪效果代码相关推荐

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

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

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

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

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

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

  4. html5实现立体照片墙效果,利用css制作3D照片墙效果

    利用css制作3D照片墙,具体代码如下所示: 无标题文档 以上代码是准备工作,在html代码的body主体中放了一个div,里面包着你想要显示在照片墙上的照片,数量可以任意.接着开始着手写样式. bo ...

  5. 利用jQuery制作简易弹幕效果

    利用jQuery制作简易弹幕效果 实现步骤: 1.制作样式 2.逻辑,思路 实现步骤: 1.制作样式 我们先来看看body中的代码: <body><div class="b ...

  6. ae破碎效果在哪_利用Ae制作出破碎效果的详细步骤

    伙伴们知道在其中如何制作出破碎效果呢?不太了解的可以去下文看看利用Ae制作出破碎效果的详细步骤. 首先,打开我们的软件,AE,小编用的是CS6版本的,不过即使版本不同,其中的操作也都是大同小异哦. 打 ...

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

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

  8. html怎么制作3D字体,用CSS3制作3D文字效果代码实例教程

    这个简单的CSS文本阴影教程将一步步教你如何通过堆叠多层阴影来创建3D文字,然后进一步利用CSS3的transform和transition属性来实现鼠标移过字体放大的效果. 阿里西西web开发网为大 ...

  9. html5 实现波浪效果图,利用HTML5实现Canvas流动的波浪特效

    特效描述:利用HTML5实现 Canvas 流动的 波浪特效.利用HTML5实现Canvas流动的波浪特效 代码结构 1. 引入JS 2. HTML代码 'use strict'; var gui = ...

最新文章

  1. hdu-3635 Dragon Balls(并查集)
  2. 三层架构与四大天王之——查
  3. android linux网络连接,Android和Linux服务器之间的TCP连接
  4. 你真的理解零拷贝了吗?
  5. N点虚拟主机管理系统安装图解
  6. 回溯算法——复原IP地址(Leetcode 93)
  7. 超级计算机能算数学题吗,圆周率到底能不能算尽?人类拿超级计算机算了一下,结果不敢相信...
  8. android activity 的四种启动模式
  9. 阅读引擎开源项目调研总结
  10. Hibernate 学习的书-夏昕(3)
  11. 最新的紫猫编程学院从零开始学脚本值得学习吗
  12. QuickChm出现的“不支持此接口”错误解决
  13. 2021年汽车修理工(中级)考试题库及汽车修理工(中级)实操考试视频
  14. echarts 生成中国陕西省份(或其他省份)的地图,大屏使用
  15. Python3脚本抢票
  16. 青海打造农畜产品“全域绿色” 化肥农药将减量20%以上
  17. NES专题——NES的游戏硬件
  18. Python遥感图像处理应用篇(二十九):遥感图像拉伸处理
  19. 长难句——考研英语刘晓燕#3
  20. 【Ubuntu 20.04 LTS】安装向日葵远程控制

热门文章

  1. 荷包岛:空气弥漫草木清香
  2. 英文励志歌曲经典珍藏
  3. 文远知行杯广东工业大学第十六届程序设计竞赛
  4. 3D软件这么多?新手怎么学才能有效高速学完次世代建模
  5. debounce实现 js_如何使用 js 实现一个 debounce 函数
  6. 电商企业办公桌面云方案
  7. 2023.6.14每日一题
  8. 【小Y学算法】⚡️每日LeetCode打卡⚡️——1.两数之和
  9. Unity中实现Scene模式下的鼠标操作效果
  10. 如何借助Vale减少开源社区文档中的负面和偏见语言