网格线条背景动画效果

代码语言:html

所属分类:背景

代码描述:网格线条背景动画效果

代码标签: 动画 效果

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">

<style>
body {
    margin: 0;
    background-color: #222;
    color: #fff;
    font-family: monospace;
    user-select: none;
}

canvas {
    display: block;
    width: 100vw;
    height: 100vh;
}

.config {
    position: absolute;
    top: 0;
    left: 0;
    width: 360px;
    padding: 10px;
    background: rgba(0, 0, 0, 0.7);
    border-radius: 10px;
}

.config.collapsed .row {
    display: none;
}

.config.collapsed .buttons {
    margin-top: 0;
}

.config.collapsed #openText {
    display: block;
}

.config.collapsed #closeText {
    display: none;
}

.config:not(.collapsed) #openText {
    display: none;
}

.config:not(.collapsed) #closeText {
    display: block;
}

.row {
    display: flex;
    align-items: center;
    padding: 2px 0;
}

label {
    display: block;
    width: 120px;
}

input[type='range'] {
    display: block;
    flex-grow: 1;
}

output {
    display: block;
    text-align: right;
    width: 50px;
}

.buttons {
    display: flex;
    justify-content: center;
    margin-top: 10px;
}

button {
    border: 1px solid white;
    border-radius: 5px;
    background: transparent;
    color: white;
    outline: 0;
}

button:hover {
    background: white;
    color: black;
}

button:active {
    background: darkgray;
}
</style>

</head>
<body translate="no">
<canvas id="canvas"></canvas>
<div class="config">
<div class="row">
<label for="cellWidth">Cell Width:</label>
<input type="range" id="cellWidth" min="10" max="100" step="1" value="24" />
<output id="cellWidthOutput">24</output>
</div>
<div class="row">
<label for="cellHeight">Cell Height:</label>
<input type="range" id="cellHeight" min="10" max="100" step="1" value="24" />
<output id="cellHeightOutput">24</output>
</div>
<div class="row">
<label for="lineWidth">Line Width:</label>
<input type="range" id="lineWidth" min="1" max="10" step="1" value="4" />
<output id="lineWidthOutput">4</output>
</div>
<div class="row">
<label for="lineLengthFactor">Line Length:</label>
<input type="range" id="lineLengthFactor" min="0.1" max="10" step="0.1" value="5.0" />
<output id="lineLengthFactorOutput">5.0</output>
</div>
<div class="row">
<label for="noiseScaleX">Noise Scale X:</label>
<input type="range" id="noiseScaleX" min="0.0001" max="1" step="0.0001" value="0.05" />
<output id="noiseScaleXOutput">0.05</output>
</div>
<div class="row">
<label for="noiseScaleY">Noise Scale Y:</label>
<input type="range" id="noiseScaleY" min="0.0001" max="1" step="0.0001" value="0.05" />
<output id="noiseScaleYOutput">0.05</output>
</div>
<div class="row">
<label for="speedFactor">Speed:</label>
<input type="range" id="speedFactor" min="0.0001" max="0.1" step="0.0001" value="0.008" />
<output id="speedFactorOutput">0.008</output>
</div>
<div class="buttons">
<button id="controlsBtn">
<span id="openText">open controls</span>
<span id="closeText">close controls</span>
</button>
</div>
</div>

<script>
//---------------------------------------------------------------
// ---> https://github.com/josephg/noisejs/blob/master/perlin.js
//---------------------------------------------------------------

/*
 * A speed-improved perlin and simplex noise algorithms for 2D.
 *
 * Based on example code by Stefan Gustavson (stegu@itn.liu.se).
 * Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).
 * Better rank ordering method by Stefan Gustavson in 2012.
 * Converted to Javascript by Joseph Gentle.
 *
 * Version 2012-03-09
 *
 * This code was placed in the public domain by its original author,
 * Stefan Gustavson. You may use it as you see fit, but
 * attribution is appreciated.
 *
 */

(function (global) {
  var module = global.noise = {};

  function Grad(x, y, z) {
    this.x = x;this.y = y;this.z = z;
  }

  Grad.prototype.dot2 = function (x, y) {
    return this.x * x + this.y * y;
  };

  Grad.prototype.dot3 = function (x, y, z) {
    return this.x * x + this.y * y + this.z * z;
  };

  var grad3 = [new Grad(1, 1, 0), new Grad(-1, 1, 0), new Grad(1, -1, 0), new Grad(-1, -1, 0),
  new Grad(1, 0, 1), new Grad(-1, 0, 1), new Grad(1, 0, -1), new Grad(-1, 0, -1),
  new Grad(0, 1, 1), new Grad(0, -1, 1), new Grad(0, 1, -1), new Grad(0, -1, -1)];

  var p = [151, 160, 137, 91, 90, 15,
  131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23,
  190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33,
  88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166,
  77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244,
  102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196,
  135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123,
  5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42,
  223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9,
  129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228,
  251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107,
  49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254,
  138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180];
  // To remove the need for index wrapping, double the permutation table length
  var perm = new Array(512);
  var gradP = new Array(512);

  // This isn't a very good seeding function, but it works ok. It supports 2^16
  // different seed values. Write something better if you need more seeds.
  module.seed = function (seed) {
    if (seed > 0 && seed < 1) {
      // Scale the seed out
      seed *= 65536;
    }

    seed = Math.floor(seed);
    if (seed < 256) {
      seed |= seed << 8;
    }

    for (var i = 0; i < 256; i++) {
      var v;
      if .........完整代码请登录后点击上方下载按钮下载查看

网友评论0