|
1 | 1 | "use strict";
|
2 | 2 |
|
3 |
| -var current = 0; |
4 |
| -var bgColors = [ |
5 |
| - [0, 100, 72], |
6 |
| - [123, 100, 134], |
7 |
| - [209, 92, 41], |
8 |
| - [174, 197, 223], |
9 |
| - [201, 214, 94], |
10 |
| - [76, 108, 175], |
11 |
| - [213, 220, 213], |
12 |
| -]; |
13 |
| -var txtColors = [ |
14 |
| - [198, 187, 214], |
15 |
| - [175, 186, 64], |
16 |
| - [213, 220, 213], |
17 |
| - [209, 92, 41], |
18 |
| - [115, 77, 78], |
19 |
| - [218, 172, 203], |
20 |
| - [6, 101, 74], |
21 |
| -]; |
22 |
| - |
23 |
| -(function () { |
24 |
| - window.addEventListener("load", main, false); |
25 |
| -})(); |
26 |
| - |
27 |
| -function resize(canvas, ctx) { |
28 |
| - canvas.width = window.innerWidth; |
29 |
| - canvas.height = window.innerHeight; |
30 |
| - draw(canvas, ctx); |
31 |
| -} |
32 |
| - |
33 |
| -function draw(canvas, ctx) { |
34 |
| - ctx.fillStyle = `rgba(${bgColors[current][0]}, ${bgColors[current][1]}, ${bgColors[current][2]}, 1)`; |
| 3 | +const state = { |
| 4 | + currentColorIndex: 0, |
| 5 | + bgColors: [ |
| 6 | + [0, 100, 72], |
| 7 | + [123, 100, 134], |
| 8 | + [209, 92, 41], |
| 9 | + [174, 197, 223], |
| 10 | + [201, 214, 94], |
| 11 | + [76, 108, 175], |
| 12 | + [213, 220, 213], |
| 13 | + ], |
| 14 | + txtColors: [ |
| 15 | + [198, 187, 214], |
| 16 | + [175, 186, 64], |
| 17 | + [213, 220, 213], |
| 18 | + [209, 92, 41], |
| 19 | + [115, 77, 78], |
| 20 | + [218, 172, 203], |
| 21 | + [6, 101, 74], |
| 22 | + ], |
| 23 | +}; |
| 24 | + |
| 25 | +window.addEventListener("load", main, false); |
| 26 | + |
| 27 | +function drawCanvas(canvas, ctx) { |
| 28 | + const { currentColorIndex, bgColors } = state; |
| 29 | + ctx.fillStyle = `rgba(${bgColors[currentColorIndex].join(", ")}, 1)`; |
35 | 30 | ctx.fillRect(0, 0, canvas.width, canvas.height);
|
36 | 31 |
|
37 |
| - lines(canvas, ctx); |
38 |
| - text(canvas, ctx); |
| 32 | + drawLines(canvas, ctx); |
| 33 | + drawText(canvas, ctx); |
| 34 | +} |
| 35 | + |
| 36 | +function resizeCanvas(canvas, ctx) { |
| 37 | + canvas.width = window.innerWidth; |
| 38 | + canvas.height = window.innerHeight; |
| 39 | + drawCanvas(canvas, ctx); |
39 | 40 | }
|
40 | 41 |
|
41 |
| -function lines(canvas, ctx) { |
42 |
| - let margin = canvas.height / 20; |
43 |
| - let stroke = (canvas.height * canvas.width) / 400000; |
| 42 | +function drawLines(canvas, ctx) { |
| 43 | + const { currentColorIndex, txtColors } = state; |
| 44 | + const margin = canvas.height / 20; |
| 45 | + const stroke = (canvas.height * canvas.width) / 400000; |
44 | 46 |
|
45 |
| - ctx.fillStyle = `rgba(${txtColors[current][0]}, ${txtColors[current][1]}, ${txtColors[current][2]}, 1)`; |
| 47 | + ctx.fillStyle = `rgba(${txtColors[currentColorIndex].join(", ")}, 1)`; |
46 | 48 |
|
47 | 49 | ctx.fillRect(margin, margin, canvas.width - margin * 2, stroke);
|
48 |
| - ctx.fillRect( |
49 |
| - margin, |
50 |
| - canvas.height - margin, |
51 |
| - canvas.width - margin * 2, |
52 |
| - stroke |
53 |
| - ); |
| 50 | + ctx.fillRect(margin, canvas.height - margin, canvas.width - margin * 2, stroke); |
54 | 51 |
|
55 | 52 | ctx.fillRect(margin, margin + stroke - 0.5, stroke, margin * 1.5);
|
56 | 53 | ctx.fillRect(margin, canvas.height - margin + 0.5, stroke, -margin * 11);
|
57 | 54 |
|
58 |
| - ctx.fillRect( |
59 |
| - canvas.width - margin - stroke, |
60 |
| - margin + stroke - 0.5, |
61 |
| - stroke, |
62 |
| - margin * 11 |
63 |
| - ); |
64 |
| - ctx.fillRect( |
65 |
| - canvas.width - margin - stroke, |
66 |
| - canvas.height - margin + 0.5, |
67 |
| - stroke, |
68 |
| - -margin * 3 |
69 |
| - ); |
| 55 | + ctx.fillRect(canvas.width - margin - stroke, margin + stroke - 0.5, stroke, margin * 11); |
| 56 | + ctx.fillRect(canvas.width - margin - stroke, canvas.height - margin + 0.5, stroke, -margin * 3); |
70 | 57 | }
|
71 | 58 |
|
72 |
| -function text(canvas, ctx) { |
73 |
| - let line_height = 32; |
74 |
| - let margin = canvas.height / 20; |
75 |
| - ctx.font = "45px Satoshi Bold"; |
76 |
| - |
77 |
| - let dev = ["🚧"] |
78 |
| - ctx.textAlign = "end"; |
79 |
| - ctx.textBaseline = "top"; |
80 |
| - for (let i = 0; i < dev.length; i++) { |
81 |
| - ctx.fillText( |
82 |
| - dev[i], |
83 |
| - canvas.width - 1.5 * margin, |
84 |
| - margin + margin / 2 + i * line_height |
85 |
| - ); |
86 |
| - } |
87 |
| - |
88 |
| - ctx.font = "25px Satoshi Bold"; |
89 |
| - let nei = ["NÚCLEO", "ESTUDANTES", "INFORMÁTICA"]; |
| 59 | +function drawText(canvas, ctx) { |
| 60 | + const margin = canvas.height / 20; |
| 61 | + |
| 62 | + ctx.font = "25px Satoshi Bold, sans-serif"; |
90 | 63 | ctx.textAlign = "start";
|
91 | 64 | ctx.textBaseline = "bottom";
|
92 |
| - for (let i = 0; i < nei.length; i++) |
93 |
| - ctx.fillText( |
94 |
| - nei[nei.length - i - 1], |
95 |
| - margin + margin / 2, |
96 |
| - canvas.height - 1.5 * margin - i * line_height |
97 |
| - ); |
98 |
| -} |
99 |
| -function sleep(ms) { |
100 |
| - return new Promise((resolve) => setTimeout(resolve, ms)); |
| 65 | + const year = new Date().getFullYear(); |
| 66 | + const text = `© ${year} NEI/AAC`; |
| 67 | + |
| 68 | + ctx.fillText(text, margin + margin / 2, canvas.height - (1.5 * margin)); |
101 | 69 | }
|
102 | 70 |
|
103 |
| -async function fade(canvas, ctx) { |
104 |
| - var op = 1; |
105 |
| - var out = true; |
106 |
| - await new Promise((r) => setTimeout(r, 2000)); |
| 71 | +async function fadeCanvas(canvas, ctx) { |
| 72 | + let op = 1; |
| 73 | + let out = true; |
| 74 | + await sleep(2000); |
| 75 | + |
107 | 76 | setInterval(async () => {
|
108 | 77 | if (op < 0.2) {
|
109 |
| - current = (current + 1) % bgColors.length; |
110 |
| - draw(canvas, ctx); |
| 78 | + state.currentColorIndex = (state.currentColorIndex + 1) % state.bgColors.length; |
| 79 | + drawCanvas(canvas, ctx); |
111 | 80 | out = false;
|
112 | 81 | } else if (op > 1) {
|
113 |
| - await new Promise((r) => setTimeout(r, 2000)); |
| 82 | + await sleep(2000); |
114 | 83 | out = true;
|
115 | 84 | }
|
116 | 85 | canvas.style.opacity = op;
|
117 |
| - canvas.style.filter = "alpha(opacity=" + op * 100 + ")"; |
118 | 86 | op += (out ? -1 : 1) * 0.01;
|
119 | 87 | }, 50);
|
120 | 88 | }
|
121 | 89 |
|
| 90 | +function sleep(ms) { |
| 91 | + return new Promise((resolve) => setTimeout(resolve, ms)); |
| 92 | +} |
| 93 | + |
122 | 94 | function main() {
|
123 |
| - let canvas = document.getElementById("canvas"); |
124 |
| - |
125 |
| - canvas.addEventListener( |
126 |
| - "keydown", |
127 |
| - function (e) { |
128 |
| - if (e.key == "Enter" || e.key == " ") { |
129 |
| - canvas.click(); |
130 |
| - } |
131 |
| - }, |
132 |
| - false |
133 |
| - ); |
134 |
| - |
135 |
| - let ctx = canvas.getContext("2d"); |
136 |
| - |
137 |
| - resize(canvas, ctx); |
138 |
| - |
139 |
| - fade(canvas, ctx); |
140 |
| - |
141 |
| - window.addEventListener("resize", () => resize(canvas, ctx), false); |
142 |
| - canvas.addEventListener( |
143 |
| - "click", |
144 |
| - () => { |
145 |
| - current = (current + 1) % bgColors.length; |
146 |
| - draw(canvas, ctx); |
147 |
| - }, |
148 |
| - false |
149 |
| - ); |
| 95 | + const canvas = document.getElementById("canvas"); |
| 96 | + const ctx = canvas.getContext("2d"); |
| 97 | + |
| 98 | + const font = new FontFace("Satoshi Bold", "url(../assets/fonts/satoshi-bold.otf)"); |
| 99 | + |
| 100 | + font.load().then((loadedFont) => { |
| 101 | + document.fonts.add(loadedFont); |
| 102 | + drawCanvas(canvas, ctx); |
| 103 | + resizeCanvas(canvas, ctx); |
| 104 | + fadeCanvas(canvas, ctx); |
| 105 | + }); |
| 106 | + |
| 107 | + window.addEventListener("resize", () => resizeCanvas(canvas, ctx), false); |
| 108 | + |
| 109 | + canvas.addEventListener("click", () => { |
| 110 | + state.currentColorIndex = (state.currentColorIndex + 1) % state.bgColors.length; |
| 111 | + drawCanvas(canvas, ctx); |
| 112 | + }, false); |
| 113 | + canvas.addEventListener("keydown", (e) => { |
| 114 | + if (e.key === "Enter" || e.key === " ") { |
| 115 | + canvas.click(); |
| 116 | + } |
| 117 | + }, false); |
150 | 118 | }
|
0 commit comments