首頁  >  文章  >  web前端  >  分享一個利用HTML5製作的海浪效果程式碼

分享一個利用HTML5製作的海浪效果程式碼

零下一度
零下一度原創
2017-05-05 14:47:563218瀏覽

在前面簡單講述了一下HTML裡的Canvas,這次根據Canvas完成了「海浪效果」(水波上升)。

(O(∩_∩)O哈哈哈~作者我能看這個動畫看一下午)

分享一個利用HTML5製作的海浪效果程式碼

##上升水波.gif

  • 動畫分析

    構成:貝塞爾曲線
    畫布:Canvas
    效果:波浪漲潮(上升、波動)
    觸發條件:點選
    按鈕

分享一個利用HTML5製作的海浪效果程式碼

#貝塞爾曲線.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

  <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);執行方法執行drawSin()

分享一個利用HTML5製作的海浪效果程式碼

#靜態貝塞爾曲線.png

5、海浪效果的實現

#需要在屬性中加入程式碼進行速率的設定


# var speed = 0.1; 數值越大速率越快
var xofspeed = 0;  波浪橫向的偏移量##var rand = beisizerheight;
波浪高度<pre class="brush:html;toolbar:false;"> 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); };</pre>

透過呼叫自身產生不同的高度,來產生海浪效果。這裡設定的屬性值配合第四步畫貝塞爾曲線一起進行理解。
運行方式 rendY();


總結

貝賽爾曲線也可以製作音波,心跳儀等。可以嘗試改變頻率值來實現。

【相關推薦】

1. 

免費h5線上影片教學

2. 

HTML5 完整版手冊

#3. 

php.cn原始html5影片教學

#

以上是分享一個利用HTML5製作的海浪效果程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn