mirror of
https://codeberg.org/vlw/vlw.se.git
synced 2025-09-13 21:13:40 +02:00

* wip: 2024-02-13T12:59:17+0100 (1707825557) * wip: 2024-02-21T03:16:48+0100 (1708481808) * wip: 2024-02-21T20:50:20+0100 (1708545020) * wip: 2024-02-21T20:50:20+0100 (1708545020) * wip: 2024-03-01T13:17:58+0100 (1709295478) * wip: 2024-03-06T12:06:58+0100 (1709723218) * wip: 2024-03-07T15:07:57+0100 (1709820477) * wip: 2024-03-09T01:36:44+0100 (1709944604) * wip: 2024-03-14T23:24:12+0100 (1710455052) * wip: 2024-03-28T18:27:40+0100 (1711646860) * wip: 2024-03-28T18:27:40+0100 (1711646860) * feat: create README * wip: 2024-04-01T12:21:45+0200 (1711966905)
47 lines
No EOL
1.5 KiB
JavaScript
Executable file
47 lines
No EOL
1.5 KiB
JavaScript
Executable file
import { default as Glitch } from "/assets/js/modules/glitch/Glitch.mjs";
|
|
|
|
// Start glitch canvas
|
|
const canvas = document.querySelector("canvas");
|
|
canvas._glitch = new Glitch(canvas);
|
|
|
|
// Text glitching
|
|
{
|
|
const GLITCH_MAX_OFFSET_PIXELS = 5;
|
|
const GLITCH_COUNT_MAX = 4;
|
|
const UNSET_GLITCH_TIMEOUT = 100;
|
|
|
|
const NEXT_GLITCH_MIN = 100;
|
|
const NEXT_GLITCH_MAX = 500;
|
|
|
|
const randomIntFromInterval = (min, max) => {
|
|
return Math.floor(Math.random() * (max - min + 1) + min)
|
|
}
|
|
|
|
const glitchText = (target) => {
|
|
const glitch = [];
|
|
|
|
// Generate text-shadow property values
|
|
for (let i = 0; i < randomIntFromInterval(2, GLITCH_COUNT_MAX); i++) {
|
|
// Text-shadow x offset
|
|
const x = randomIntFromInterval(GLITCH_MAX_OFFSET_PIXELS * -1, GLITCH_MAX_OFFSET_PIXELS);
|
|
|
|
// Get red or blue color from random parity
|
|
const rgb = randomIntFromInterval(0, 1) ? "255,0,0" : "0,0,55";
|
|
// Generate random decimal transparancy
|
|
const alpha = randomIntFromInterval(30, 50) / 100;
|
|
|
|
glitch.push(`${x}px 0 0 rgba(${rgb}, ${alpha})`);
|
|
}
|
|
|
|
// Glitch the text!
|
|
target.style.setProperty("text-shadow", glitch.join(","));
|
|
|
|
// Remove glitch effect from text
|
|
setTimeout(() => target.style.setProperty("text-shadow", "unset"), UNSET_GLITCH_TIMEOUT);
|
|
|
|
// Glitch the text again after this timeout
|
|
setTimeout(() => glitchText(target), randomIntFromInterval(NEXT_GLITCH_MIN, NEXT_GLITCH_MAX));
|
|
};
|
|
|
|
[...document.querySelectorAll("[glitch-text]")].forEach(element => glitchText(element));
|
|
} |