canvas实现多种树叶铺满屏幕效果代码

代码语言:html

所属分类:其他

代码描述:canvas实现多种树叶铺满屏幕效果代码,点击切换效果。

代码标签: canvas树叶 铺满 屏幕

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">

<style>
    body {
  height: 100vh;
  width: 100vw;
  overflow:hidden;
}

canvas {
  height: 100vh;
  width: 100vw;
}
</style>

</head>

<body>
 
    <canvas id="canvas"></canvas>
 
    <script>
        (function () {

  //fields
  var canvas = document.getElementById("canvas");
  var body = document.getElementsByTagName("body")[0];
  var positions = []
  var ctx = canvas.getContext("2d");
  
  /*Initialize flowers*/
  body.addEventListener("click",function(ev){
    drawFlowers(false)
  })
  window.onload = ()=>{drawFlowers(true)}
  window.onresize = ()=>{drawFlowers(false)}

  /*Flower flunctions*/
  function Flower(opt) {
   
    this.r = opt.allowLarge && chance(.05) ? getRandomInt(50,150) : getRandomInt(20,50)
    this.x = getRandomInt(0, canvas.width)
    this.y = getRandomInt(0, canvas.height)

    this.lw = 4;    
    this.angle = getRandomInt(-30,30)
    this.rad = this.angle * (Math.PI / 180) /*FLOWER ROTATION*/
    this.opacity = 1;
    this.petals = chance(.03) ? 4 : 3;
    this.shiftOut = this.petals == 4 ? 0 : 0
    this.petalBase = 0;
    this.petalSpread1 = getRandomFloat(opt.minSpread, opt.maxSpread)
    this.petalLength1 = this.petalSpread1 * getRandomFloat(1.4, 1.8) /*length 1.5 longer than spread*/
    this.petalSpread2 = getRandomFloat(this.petalSpread1+.15,this.petalSpread1-.15);
    this.petalLength2 = this.petalLength1
    this.leafRotation = Math.floor(360/this.petals)/*PETAL ROTATION*/
    this.color1 = vary(opt.color1, opt.colorVariance)
  }
  
  function drawFlowers(firstTime) {
    scaleCanvas() 
    ctx.clearRect(0, 0, canvas.width, canvas.height)
    positions = [];
    
    //drawing options
    var opt = {    
      spaceAround:chance(), 
      allowLarge:chance(0), 
      padding:getRandomFloat(.5,3), /*multiplier*/
      color1:pick(greens),
      stems: chance(.7),
      stemLength : getRandomInt(20,(chance(.2)?150:60)), /*multiplier*/
      stemWidth:getRandomInt(2,5), /*multiplier*/
      colorVariance:getRandomInt(10,20),
      minSpread:getRandomFloat(.4,.7),
      maxSpread:getRandomFloat(.4,1.2),
      fieldEffect:firstTime || chance(.33),
      randomY:chance()
    }
   .........完整代码请登录后点击上方下载按钮下载查看

网友评论0