<canvas id="Theback"></canvas>
HTML5를 사용하여 만든 물결 효과 코드 공유
앞서 HTML에서 Canvas에 대해 간략하게 이야기한 적이 있는데 이번에는 Canvas를 기반으로 "파도 효과"(오르는 물결 효과)를 완성했습니다.
(O(∩_∩)O ㅋㅋㅋㅋㅋ 작가님 오후 내내 애니메이션 볼 수 있어요)
Rising Water Wave.gif
애니메이션 분석
구성: 베지어 곡선
캔버스: 캔버스
효과: 파도 썰물(상승, 변동)
트리거 조건: 버튼 클릭
Bezier curve.gif
알고리즘 구현 분석: sin()함수부터 시작하여, sin()이 클수록 파동의 요동도 커진다. 간단히 말해서, sin() 값
<button type="button"
onclick="Beisizer()"//点击时触发JS事件
onmouseover="bcd()"//鼠标经过时JS事件
onmouseleave="out()"//鼠标离开时JS事件
id="Anniu">确                     定</button>
로그인 후 복사
2. 캔버스 생성<button type="button" onclick="Beisizer()"//点击时触发JS事件 onmouseover="bcd()"//鼠标经过时JS事件 onmouseleave="out()"//鼠标离开时JS事件 id="Anniu">确                     定</button>
<canvas id="Theback"></canvas>
로그인 후 복사
3. JS 이벤트 생성 <canvas id="Theback"></canvas>
//获取画布
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 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;
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 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);
Run 메서드는 drawSin()을 실행합니다.
값이 클수록 속도가 빨라집니다. speedvar 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); };
는 자신을 호출하여 다른 높이를 생성하여 파도 효과를 생성합니다. 여기서 설정한 속성값은 베지어 곡선을 그리는 네 번째 단계와 함께 이해하면 된다.요약베지어 곡선은 음파, 심박수 모니터 등도 생성할 수 있습니다. 이를 달성하기 위해 빈도 값을 변경해 볼 수 있습니다. [관련 추천]1. 3.실행 방법 rendY();
위 내용은 HTML5를 사용하여 만든 물결 효과 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.
