vlw.se/assets/js/pages/error.js
Victor Westerlund 140132fa72
feat: release 1.0.0 (#1)
* 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)
2024-04-01 10:22:25 +00:00

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));
}