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

        分享一個利用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號
        主站蜘蛛池模板: 国产精品偷伦视频观看免费 | 日韩专区亚洲精品欧美专区| 乱色精品无码一区二区国产盗| 国产在线精品福利大全| 国产成人精品免费视| 乱码精品一区二区三区| 亚洲精品第一国产综合境外资源 | 人妻AV一区二区三区精品| 久久午夜无码鲁丝片午夜精品| 成人精品一区二区久久久| 国产精品一二二区| 岛国精品一区免费视频在线观看| 亚洲国产精品无码AAA片| 欧洲精品码一区二区三区免费看 | 亚洲国产成人久久精品动漫| 国产成人精品久久二区二区| 成人国产精品免费视频| 精品亚洲成a人片在线观看少妇 | 欧美日韩精品久久久久| 国产日韩久久久精品影院首页 | 亚洲无码精品浪潮| 日韩精品欧美亚洲| 热RE99久久精品国产66热| 麻豆国产精品VA在线观看不卡| 精品伦精品一区二区三区视频| 国产精品乱视频| 精品97国产免费人成视频| 精品国产日韩亚洲一区| 久久国产精品二国产精品| 国精品产露脸自拍| 久久人人爽人人精品视频| 欧美国产精品va在线观看| 久久亚洲国产成人精品无码区 | 在线欧美v日韩v国产精品v| 欧美精品一区二区三区在线| 中文精品一卡2卡3卡4卡| 亚洲精品视频在线| 国产精品亚洲mnbav网站| 精品无码国产自产拍在线观看蜜| 精品久久久久久国产牛牛app| 免费视频精品一区二区|