>  기사  >  웹 프론트엔드  >  HTML5를 사용하여 만든 물결 효과 코드 공유

HTML5를 사용하여 만든 물결 효과 코드 공유

零下一度
零下一度원래의
2017-05-05 14:47:563273검색

앞서 HTML에서 Canvas에 대해 간략하게 이야기한 적이 있는데 이번에는 Canvas를 기반으로 "파도 효과"(오르는 물결 효과)를 완성했습니다.

(O(∩_∩)O ㅋㅋㅋㅋㅋ 작가님 오후 내내 애니메이션 볼 수 있어요)

HTML5를 사용하여 만든 물결 효과 코드 공유

Rising Water Wave.gif

  • 애니메이션 분석
    구성: 베지어 곡선
    캔버스: 캔버스
    효과: 파도 썰물(상승, 변동)
    트리거 조건: 버튼 클릭

HTML5를 사용하여 만든 물결 효과 코드 공유

Bezier curve.gif


알고리즘 구현 분석: sin()함수부터 시작하여, sin()이 클수록 파동의 요동도 커진다. 간단히 말해서, sin() 값

시작해 보겠습니다.

1. 트리거 조건 생성(버튼)

<button type="button"
        onclick="Beisizer()"//点击时触发JS事件
        onmouseover="bcd()"//鼠标经过时JS事件
        onmouseleave="out()"//鼠标离开时JS事件
        id="Anniu">确  &nbsp &nbsp  &nbsp  &nbsp  &nbsp  &nbsp &nbsp  &nbsp  &nbsp  &nbsp  定</button>

2. 캔버스 생성

  <canvas id="Theback"></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);Run 메서드는 drawSin()을 실행합니다.

HTML5를 사용하여 만든 물결 효과 코드 공유

정적 셸 Searle Curve.png

5. 파도 효과를 얻으려면

속성에 일부 코드를 추가하여 속도를 설정해야 합니다


값이 클수록 속도가 빨라집니다. 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);
    };

는 자신을 호출하여 다른 높이를 생성하여 파도 효과를 생성합니다. 여기서 설정한 속성값은 베지어 곡선을 그리는 네 번째 단계와 함께 이해하면 된다.

실행 방법 rendY();

요약

베지어 곡선은 음파, 심박수 모니터 등도 생성할 수 있습니다. 이를 달성하기 위해 빈도 값을 변경해 볼 수 있습니다.

[관련 추천]

1.

무료 h5 온라인 동영상 튜토리얼

HTML5 정식 버전 매뉴얼

3.

php.cn 원본 html5 동영상 튜토리얼

위 내용은 HTML5를 사용하여 만든 물결 효과 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.