中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用canvas實現動態雪花飄落特效

發布時間:2020-06-17 13:36:20 來源:億速云 閱讀:478 作者:鴿子 欄目:web開發

本篇文章給大家介紹一下使用canvas實現雪花隨機動態飄落效果的方法,文中示例代碼介紹的非常詳細。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

如何用canvas實現動態雪花飄落特效

用canvas實現雪花隨機動態飄落,代碼如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
  body{
    margin: 0;
    padding: 0;
  }
  canvas{
    background: #000;
  }
</style>
<body>
  <canvas id = "snow">

  </canvas>
  <script>
    var canvas = document.getElementById('snow');
    var context = canvas.getContext('2d');
    // 獲得可視區的寬高
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    function snow(){
      context.save();
      // 開啟路徑
      context.beginPath();
      // 移動畫布,確定雪花終點為中心點
      context.translate(100,100);
      //起點
      context.moveTo(-20,0);
      // 終點
      context.lineTo(20,0);
      // 線變成白色
      context.strokeStyle = '#fff';
      // 線變粗
      context.lineWidth = 10;
      // 線變圓頭
      context.lineCap = 'round';
      context.stroke();
      // 角度轉弧度
      var disX = Math.sin(30*Math.PI/180)*20;
      var disY = Math.sin(60*Math.PI/180)*20;
      // 畫第二條線,左下到右上的線
      context.moveTo(-disX,disY);
      context.lineTo(disX,-disY);
      // 畫第三條線
      context.moveTo(-disX,-disY);
      context.lineTo(disX,disY);
      context.stroke();
      context.restore();
    }
    // snow();
    //生成雪花的構造函數
    function Snow(x,y,scale,rotate,speedX,speedY,speedR){
           this.x = x;
           this.y = y;
           this.scale = scale;
           this.rotate = rotate;
           this.speedX = speedX;
           this.speedY = speedY;
           this.speedR = speedR;
          // 渲染雪花
          this.render = function(){
            context.save();
            context.beginPath();
            context.translate(this.x,this.y);
            context.scale(this.scale,this.scale);
            context.rotate(this.rotate*Math.PI/180);
            context.moveTo(-20,0);
            context.lineTo(20,0);
            context.strokeStyle = '#fff';
            context.lineWidth = 10;
            context.lineCap = 'round';
            context.stroke();
            var disX = Math.sin(30*Math.PI/180)*20;
            var disY = Math.sin(60*Math.PI/180)*20;
            context.moveTo(-disX,disY);
            context.lineTo(disX,-disY);
            context.moveTo(-disX,-disY);
            context.lineTo(disX,disY);
            context.stroke();
            context.restore();

          }

    }
    // var snow = new Snow(50,50,1,10,10,10,10);
    // snow.render();
    // 存儲所有生成的雪花
    var snowArray = [];
    // 生成雪花
      function init(){
        var len = 100;
        for(var i = 0;i<len;i++){
          var x = Math.random()*canvas.width;
          var scale = Math.random()+0.5;
          var rotate = Math.random()*60;
          var speedX = Math.random()+1
          var speedY = Math.random()+5;
          var speedR = Math.random()*4+2;
          // var snow = new Snow(x,0,scale,rotate,speedX,speedY,speedR);
          // snow.render();
          (function(x,y,scale,rotate,speedX,speedY,speedR){
            setTimeout(function(){
            var snow = new Snow(x,0,scale,rotate,speedX,speedY,speedR);
            snow.render();
            snowArray.push(snow);
          },Math.random()*8000);   
          })(x,0,scale,rotate,speedX,speedY,speedR);
      }snowing();
    }init();
      // 動起來
      function snowing(){
        setInterval(function(){
          //先清除
          context.clearRect(0,0,canvas.width,canvas.height);
          for(var i = 0;i < snowArray.length;i++){
            snowArray[i].x = (snowArray[i].x+snowArray[i].speedX)%canvas.width;
            snowArray[i].y = (snowArray[i].y+snowArray[i].speedY)%canvas.height;
            snowArray[i].rotate = (snowArray[i].rotate+snowArray[i].speedR)%60;
            snowArray[i].render();
          }
        },30);
      }
    
    /**
     * sin60 = 對邊/斜邊 =>  對邊 = sin60*斜邊  =>  y=sin60*半徑(r);
     */
  </script>
</body>
</html>

動態效果圖:

如何用canvas實現動態雪花飄落特效

以上就是canvas實現雪花隨機動態飄落效果(代碼示例)的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五莲县| 宁阳县| 长岛县| 曲松县| 彰化市| 察雅县| 宜阳县| 佳木斯市| 腾冲县| 芦溪县| 嘉善县| 宁河县| 雅安市| 武邑县| 山东| 奉化市| 黄冈市| 府谷县| 历史| 丽水市| 昆山市| 汨罗市| 上林县| 凭祥市| 南城县| 杭州市| 关岭| 米泉市| 天等县| 大田县| 阳曲县| 曲水县| 内江市| 图们市| 龙南县| 交口县| 仁怀市| 额济纳旗| 当雄县| 漠河县| 灵川县|