欢迎来到代码驿站!

当前位置:首页 >

原生js+canvas实现下雪效果

时间:2020-08-02 13:00:04|栏目:|点击:

本文实例为大家分享了js+canvas实现下雪效果的具体代码,供大家参考,具体内容如下

效果展示:

源码展示:

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>canvas下雪效果(原生js)</title>
  <style>
    * {
      margin: 0;
      padding: 0
    }
 
    html, body {
      width: 100%;
      height: 100%;
      overflow: hidden;
      background-color: #222;
    }
 
    #canvas {
      position: absolute;
      top: 0;
      left: 0;
    }
  </style>
</head>
<body>
<canvas id="canvas"></canvas>
<img id="imgSnow" width="0" height="0" src="xh.png" alt="雪花">
<img id="bgSnow" width="100%" height="100%" src="bj.jpg" alt="背景">
 
<script>
  window.onload = function () {
    var canvas = document.getElementById("canvas");
    var imgSnow = document.getElementById("imgSnow");
    var bgSnow = document.getElementById("bgSnow");
    var ctx = canvas.getContext('2d');
 
    var mbody = document.querySelector("body");
 
    canvas.width =mbody.offsetWidth;
    canvas.height = mbody.offsetHeight;
 
    var GetRandomNum = function (Min, Max) {
      var Range = Max - Min;
      var Rand = Math.random();
      return (Min + Math.round(Rand * Range));
    }
 
    // console.log(GetRandomNum(0, canvas.width))
 
    var snowArray = {}; //雪花对象
    var snowIndex = 0; //标识符
    var setting = {
      num: 30, //数量
      snowSize: 20, //大小
      startX: Math.random() * canvas.width, //起始横坐标
      startY: 0, //起始纵坐标
      vy: 0.01
    }
 
    function snow() {
      // 起始横坐标
      this.x = Math.random() * canvas.width;
      // 起始纵坐标
      this.y = setting.startY;
      this.size = setting.snowSize + Math.random() * 10 - 10;
 
      //横坐标偏移量
      this.vx = Math.random() * 3 - 2; //偏移量
      //纵坐标偏移量
      this.vy = Math.random() * 10;
 
      this.life = 0;
      this.maxLife = 100;
      this.id = snowIndex;
      //当前信息保存至对象snowArray
      snowArray[snowIndex] = this;
 
      snowIndex++;
    }
 
    snow.prototype.draw = function () {
      this.x += this.vx;
      this.y += this.vy;
      this.vy += setting.vy;
      this.life++;
 
      //删除
      if (this.y > canvas.height * 0.9 - 20) {
        snowArray[this.id]
      } else if (this.life >= this.maxLife) {
        snowArray[this.id]
      }
      ctx.drawImage(imgSnow, this.x, this.y, this.size, this.size)
    }
 
    setInterval(function () {
      ctx.drawImage(bgSnow, 0, 0, canvas.width, canvas.height);
 
      //数
      for (var i = 0; i < setting.num; i++) {
        if (Math.random() > 0.97) {
          new snow();
        }
      }
 
      for (var i in snowArray) {
        snowArray[i].draw();
      }
 
    }, 100)202082104246954
  }
</script>
 
</body>
</html>

图片:

上一篇:原生js canvas实现鼠标跟随效果

栏    目:

下一篇:R语言ggplot2边框背景去除的实现

本文标题:原生js+canvas实现下雪效果

本文地址:http://www.codeinn.net/misctech/2970.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有