JIDU_Matrix
by niuuin
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/addons/p5.sound.min.js"></script>
<script src="https://unpkg.com/[email protected]"></script>
<link rel="stylesheet" type="text/css" href="style.css">
<meta charset="utf-8" />
</head>
<body>
<main>
</main>
<script src="sketch.js"></script>
<script src="element.js"></script>
</body>
</html>
CSS
html,
body {
margin: 0;
padding: 0;
}
canvas {
display: block;
}
.slider_size, .slider_color {
background-color: transparent;
-webkit-appearance: none;
}
/* 调整滑块背景样式 */
.slider_size::-webkit-slider-runnable-track,
.slider_color::-webkit-slider-runnable-track{
background: #2A2849;
height: 14px;
border-radius: 0px;
-webkit-appearance: none;
cursor: pointer;
}
/* 调整滑块控制项样式 */
.slider_size::-webkit-slider-thumb,
.slider_color::-webkit-slider-thumb{
width: 12px;
height: 12px;
background: #bfa9fa;
cursor: pointer;
-webkit-appearance: none;
margin-top: 1px;
border-radius: 50px;
}
JavaScript
// "s" 键保存 svg 文件
// 保存 svg 与自适应尺寸冲突,当前版本关闭自适应;
// 需要调整尺寸时刷新页面即可;
// total -> 密度,每行多少个元素
// 上方滑块 -> 元素色值
// 下方滑块 -> 元素尺寸
let total = 30;
let step;
let elements = [];
let sizeMax, sizeMid, sizeMin;
let colorStr = "bfa9fa-7437f6-392577";
let colors = colorStr.split("-").map((a) => "#" + a);
let slider_size, slider_color;
function setSlider() {
slider_size = createSlider(0, 1, 0.5, 0.05);
slider_color = createSlider(0, 1, 0.5, 0.05);
// 调整滑块位置 position(x,y)
slider_size.position(10, height-40);
slider_color.position(10, height-70);
slider_size.addClass("slider_size");
slider_color.addClass("slider_color");
}
function setElement() {
let index = 0;
for (let i = 0; i < width; i += step) {
for (let j = 0; j < height; j += step) {
elements[index] = new Element(i, j);
index++;
}
}
}
function setup() {
createCanvas(windowWidth, windowHeight, SVG);
rectMode(CENTER);
step = width / total;
setElement();
sizeMax = step;
sizeMid = sizeMax * 0.5;
sizeMin = sizeMax * 0.25;
frameRate(1);
noStroke();
setSlider();
}
function draw() {
background("#18172b");
drawElements();
}
function drawElements() {
for (let i = 0; i < elements.length; i++) {
let elementsSize = map(noise(frameCount * 0.02), -1, 1, 0, width / total);
let c = colors[i % colors.length];
let s = 0;
if (random(1) < slider_color.value()) {
c = colors[0];
} else if (random(1) < .5) {
c = colors[1];
} else if (random(1) < .25) {
c = colors[2];
} else {
c = "#18172b";
}
if (random(1) < slider_size.value()) {
s = sizeMin;
} else if (random(1) < .5) {
s = sizeMid;
} else if (random(1) < .25) {
s = sizeMax;
}
if(slider_size.value() <= 0) s = sizeMax;
if(slider_color.value() <= 0) c = colors[2];
elements[i].draw(s, c);
}
}
// function windowResized() {
// setup();
// }
function keyPressed() {
// if(key == "p" || key == "P")...