Grid 3
How do I make an grid 3?
What is a grid 3? How do you make a grid 3? This script and codes were developed by Satchmorun on 28 August 2022, Sunday.
Grid 3 - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>Grid 3</title> <link rel="stylesheet" href="css/style.css">
</head>
<body> <canvas id="canvas"></canvas>
<canvas id="lasers"></canvas>
<div id="instructions">click to restart</div> <script src="js/index.js"></script>
</body>
</html>
Grid 3 - Script Codes CSS Codes
body { margin: 0; padding: 0; overflow: hidden;
}
body { background-color: #22313F;
}
#instructions { position: fixed; top: 1em; left: 1em; color: rgba(51, 110, 123, 0.5); font-weight: 200; font-family: Helvetica, Arial, sans-serif; letter-spacing: 2px;
}
Grid 3 - Script Codes JS Codes
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var c2 = document.getElementById('lasers');
var lasers = c2.getContext('2d');
var Width, Height;
sizeCanvas();
var raf = requestAnimationFrame;
/*---------------------------------------------------------------------------*/
'floor|random|round|abs|sqrt|PI|atan2|sin|cos|pow|max|min' .split('|') .forEach(function(p) { this[p] = Math[p]; });
var TAU = PI*2;
function randint(n) { return floor(n*random()); }
function choose() { return arguments[randint(arguments.length)]; }
/*---------------------------------------------------------------------------*/
var running = false;
var time = 0;
function sizeCanvas() { Width = canvas.width = c2.width = innerWidth; Height = canvas.height = c2.height = innerHeight; canvas.style.position = c2.style.position = 'fixed'; canvas.style.top = c2.style.top = 0; canvas.style.left = c2.style.left = 0;
}
function loop() { draw(); time++; if (running) raf(loop);
}
document.onclick = function(e) { running = false; setTimeout(function() { time = 0; reset(); running = true; raf(loop); }, 100);
};
var mouse = {x: 100, y: 100};
document.onmousemove = function(e) { mouse.x = e.pageX; mouse.y = e.pageY;
};
/*---------------------------------------------------------------------------*/
function Creeper(x, y, fn, depth) { this.x = this.x1 = x; this.y = this.x2 = y; this.fn = (fn || chooseDirection()); this.depth = (depth || 0);
}
var directions = [ N, N, S, S, E, E, W, W, NE1, NE2, NW1, NW2, SE1, SE2, SW1, SW2
];
function chooseDirection(fns) { if (fns) { do { fn = chooseDirection(); } while(fns.indexOf(fn) > -1); return fn; } return directions[randint(16)];
}
Creeper.prototype.animate = function(n) { var pos = this.fn(this.x, this.y, n); this.x1 = pos.x; this.y1 = pos.y;
};
Creeper.prototype.spawn = function() { var x, y; switch (this.fn) { case N: x = this.x; y = this.y - Length; break; case S: x = this.x; y = this.y + Length; break; case E: x = this.x + Length; y = this.y; break; case W: x = this.x - Length; y = this.y; break; case NE1: case NE2: x = this.x + Length; y = this.y - Length; break; case NW1: case NW2: x = this.x - Length; y = this.y - Length; break; case SE1: case SE2: x = this.x + Length; y = this.y + Length; break; case SW1: case SW2: x = this.x - Length; y = this.y + Length; break; } return new Creeper(x, y, chooseDirection(), this.depth+1);
};
function N(x, y, n) { return segment(x, y, x, y - Length, n); }
function S(x, y, n) { return segment(x, y, x, y + Length, n); }
function E(x, y, n) { return segment(x, y, x + Length, y, n); }
function W(x, y, n) { return segment(x, y, x - Length, y, n); }
function NE1(x, y, n) { return arc(x, y-Length, TAU/4, 0, n, true); }
function NE2(x, y, n) { return arc(x+Length, y , PI, 3*TAU/4, n, false); }
function NW1(x, y, n) { return arc(x , y-Length, TAU/4, TAU/2, n, false); }
function NW2(x, y, n) { return arc(x-Length, y , TAU, 3*TAU/4, n, true); }
function SE1(x, y, n) { return arc(x , y+Length, 3*TAU/4, TAU, n, false); }
function SE2(x, y, n) { return arc(x+Length, y , TAU/2, TAU/4, n, true); }
function SW1(x, y, n) { return arc(x , y+Length, 3*TAU/4, TAU/2, n, true); }
function SW2(x, y, n) { return arc(x-Length, y , 0, TAU/4, n, false); }
function jitter(n) { return n + choose(-1, 0, 1);
}
function segment(x1, y1, x2, y2, n) { var dx = (x2 - x1)/FPC; var dy = (y2 - y1)/FPC; var x = x1 + n*dx; var y = y1 + n*dy; ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x+dx, y+dy); ctx.lineCap = 'round'; ctx.lineWidth = Thickness; ctx.strokeStyle = Color; ctx.stroke(); return {x: x+dx, y: y+dy};
}
function arc(x, y, a1, a2, n, dir) { var da = (a2 - a1)/FPC; var a = a1 + n*da; ctx.beginPath(); ctx.arc(x, y, Length, a, a + da, dir); ctx.lineCap = 'round'; ctx.lineWidth = Thickness; ctx.strokeStyle = Color; ctx.stroke(); return { x: x + Length*cos(a + da), y: y + Length*sin(a + da) };
}
function laserTo(x, y) { lasers.beginPath();
// lasers.moveTo(floor(Width/2), floor(Height/2)); lasers.moveTo(mouse.x, mouse.y); lasers.lineTo(x, y); lasers.closePath(); lasers.strokeStyle = 'rgba(51, 110, 123, 0.3)'; lasers.lineWidth = 0.3; lasers.stroke(); var g = lasers.createRadialGradient(x, y, 0, x, y, 4); g.addColorStop(0, 'white'); g.addColorStop(1, 'rgba(34, 49, 63, 0)'); lasers.beginPath(); lasers.arc(x, y, 4, 0, TAU); lasers.fillStyle = g; lasers.fill();
}
/*---------------------------------------------------------------------------*/
var creepers;
var Length = 40;
var Thickness = 1;
var Color = 'rgba(51, 110, 123, 1)';
// Frames per cycle
var FPC = 20;
function reset() { sizeCanvas(); ctx.clearRect(0, 0, Width, Height); var x = floor(Width/2); var y = floor(Height/2); creepers = [new Creeper(x, y, N), new Creeper(x, y, S), new Creeper(x, y, E), new Creeper(x, y, W)];
}
function draw() { var next = []; if (time > 0 && time % FPC === 0) { for (i = 0; i < creepers.length; i++) { var c = creepers[i]; if (c.depth > 10) continue; next.push(c.spawn()); if (random() < 0.1) next.push(c.spawn()); } creepers = next; if (creepers.length == 0) running = false; } lasers.clearRect(0, 0, Width, Height); for (var i = 0; i < creepers.length; i++) { var c = creepers[i]; c.animate(time % FPC); laserTo(c.x1, c.y1); }
}
reset();
running = true;
raf(loop);
Developer | Satchmorun |
Username | satchmorun |
Uploaded | August 28, 2022 |
Rating | 4.5 |
Size | 3,411 Kb |
Views | 28,336 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
Boxes | 3,065 Kb |
Lines | 2,609 Kb |
Circular | 2,552 Kb |
Wanderers in the Dark | 3,362 Kb |
Particles | 2,797 Kb |
Network 3 | 3,896 Kb |
Mess | 3,472 Kb |
Boxes 2 | 3,237 Kb |
Patchwork | 2,575 Kb |
Rectangles | 2,994 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
Simple Login Form Template | Banunn | 3,571 Kb |
Wikipedia viewer | Chpecson | 2,865 Kb |
Nested flexbox layout for library catalog | Boycetrus | 3,271 Kb |
Css3 loader | Clknap | 2,391 Kb |
Material Design-Layout-Principles Practice | Fraina | 2,331 Kb |
Barber Shop | Bhlaird | 6,270 Kb |
Transitioning application screens with semantically named classes | Djgrant | 3,697 Kb |
Side Sliding Menu CSS | EduardL | 4,388 Kb |
Typefaces with descriptions | Megandoty | 2,944 Kb |
Drag in vanilla js using dotval math instead of translate | Paulq | 2,662 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!