站長資訊網
        最全最豐富的資訊網站

        分享一個利用HTML5制作的海浪效果代碼

        在前面簡單講述了一下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;波浪高度

            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. php.cn原創html5視頻教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 无码人妻精品一区二区三区久久| 精品午夜福利在线观看| 中文无码精品一区二区三区| 99在线精品视频在线观看| 久久久久亚洲精品天堂久久久久久| 97久久综合精品久久久综合| 欧美精品黑人粗大视频| 日本人精品video黑人| 亚洲午夜福利精品无码| 人精品影院 | 日韩经典精品无码一区| 精品国产福利久久久| 精品无码人妻一区二区三区品| 四虎精品影库4HUTV四虎| 国产乱人伦偷精品视频| 青青草国产精品| www.99精品| 2022国产精品福利在线观看| 日韩人妻精品一区二区三区视频| 日韩精品人成在线播放| 精品亚洲成α人无码成α在线观看 | 精品视频一区二区三三区四区| 亚洲精品亚洲人成在线观看下载| 黄床大片免费30分钟国产精品| 99久久婷婷国产综合精品草原| 久久精品嫩草影院| 国产成人精品综合网站| 国产精品无码无片在线观看| 日韩精品无码免费一区二区三区| 亚洲欧美日韩精品久久亚洲区 | 精品国产爽爽AV| 国产这里有精品| 精品久久久久久无码国产| 国产精品女人呻吟在线观看| 亚洲第一精品在线视频| 无码精品一区二区三区免费视频| 国产精品亚洲专区在线观看| 国产精品99精品久久免费| 99久久99久久精品免费看蜜桃| 国产综合精品女在线观看| 国产午夜精品免费一区二区三区|