js實現水波紋背景


<!DOCTYPE html>
<html>
    <head>
     <title>水波背景</title>
     <meta charset="utf-8" />
     <style>
         html, body {width:100%; height:100%; padding:0; margin:0;}
     </style>
    </head>
    <body>
         <canvas id="canvas" style="position:absolute;top:0px;left:0px;z-index:1;"></canvas>
        <script type="text/javascript">
           //獲得canvas容器
          var canvas = document.getElementById('canvas'); 
          //獲得畫筆
          var ctx = canvas.getContext('2d'); 
          //canvas設置寬度
          canvas.width = canvas.parentNode.offsetWidth; 
          //canvas設置高度
          canvas.height = canvas.parentNode.offsetHeight;
          //如果瀏覽器支持requestAnimFrame則使用requestAnimFrame否則使用setTimeout 
          window.requestAnimFrame = (function(){ 
          return window.requestAnimationFrame  || 
            window.webkitRequestAnimationFrame || 
            window.mozRequestAnimationFrame || 
            function( callback ){ 
                 window.setTimeout(callback, 1000 / 60); 
            }; 
          })(); 
          // 波浪大小
          var boHeight = canvas.height / 10;
          var posHeight = canvas.height / 1.2;
          //初始角度為0 
          var step = 0; 
          //定義三條不同波浪的顏色 
          var lines = ["rgba(0,222,255, 0.2)", "rgba(157,192,249, 0.2)", "rgba(0,168,255, 0.2)"]; 
          function loop(){ 
              //清除canvas內容
               ctx.clearRect(0,0,canvas.width,canvas.height); 
               step++; 
               //畫3個不同顏色的矩形 
               for(var j = lines.length - 1; j >= 0; j--) { 
                ctx.fillStyle = lines[j]; 
                //每個矩形的角度都不同,每個之間相差45度 
                var angle = (step+j*50)*Math.PI/180; 
                var deltaHeight = Math.sin(angle) * boHeight;
                var deltaHeightRight = Math.cos(angle) * boHeight; 
                ctx.beginPath();
                ctx.moveTo(0, posHeight+deltaHeight); 
                ctx.bezierCurveTo(canvas.width/2, posHeight+deltaHeight-boHeight, canvas.width / 2, posHeight+deltaHeightRight-boHeight, canvas.width, posHeight+deltaHeightRight); 
                ctx.lineTo(canvas.width, canvas.height); 
                ctx.lineTo(0, canvas.height); 
                ctx.lineTo(0, posHeight+deltaHeight); 
                ctx.closePath(); 
                ctx.fill(); 
           }
           requestAnimFrame(loop);
          } 
          loop(); 
     </script>
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM