diff --git a/index.html b/index.html new file mode 100644 index 0000000..cf315b5 --- /dev/null +++ b/index.html @@ -0,0 +1,37 @@ + + + + + + + PINK NODDERS + + + + +
+ PINK NODDERS + +
+ + + +
+

I N S A N I T Y

+
+ + + + + \ No newline at end of file diff --git a/pink-nodders.gif b/pink-nodders.gif new file mode 100644 index 0000000..95f7d74 Binary files /dev/null and b/pink-nodders.gif differ diff --git a/script.js b/script.js new file mode 100644 index 0000000..faaa28f --- /dev/null +++ b/script.js @@ -0,0 +1,142 @@ +// Function to generate a random number within a range +function random(min, max) { + return Math.floor(Math.random() * (max - min + 1) + min); +} + +// Function to create an emote element +function createEmote() { + const emote = document.createElement('img'); + emote.src = 'pink-nodders.gif'; + emote.classList.add('emote'); + const d = Math.random() * 100; + + emote.style.width = `${d}px`; + emote.style.height = `${d}px`; + + document.body.appendChild(emote); + return emote; +} + +// Function to update the emote position +function updatePosition(emote) { + emote.style.left = `${random(0, window.innerWidth - 150)}px`; // 150 is the emote width + emote.style.top = `${random(0, window.innerHeight - 150)}px`; // 150 is the emote height +} + +// Create multiple emotes and make them bounce around +const aLength = (localStorage.getItem('alen')) ? Number(localStorage.getItem('alen')) : 20; +let emotes = Array.from({ length: aLength }, createEmote); + +// Update each emote's initial position +emotes.forEach(updatePosition); + +// Function to animate emotes +function animateEmotes() { + emotes.forEach(emote => { + const xMove = random(-100, 100); + const yMove = random(-100, 100); + emote.style.transform = `translate(${xMove}px, ${yMove}px)`; + // Update the position after the transition + setTimeout(() => updatePosition(emote), 1000); + }); +} + +function changeNodders() { + const aLengthNew = document.querySelector('#cherryBlossomPopup').querySelector('input[type="number"]').value; + localStorage.setItem('alen', aLengthNew); + document.querySelectorAll('.emote:not(.NOCLONE)').forEach(el => el.remove()); + + emotes = Array.from({ length: aLengthNew }, createEmote); + emotes.push(document.querySelector('.NOCLONE')); + emotes.forEach(updatePosition); +} + + +function dupNodders() { + document.querySelectorAll('.emote:not(.NOCLONE)').forEach(el => el.click()); +} + +function changeBK() { + let r = 255; // Red value at full to emphasize pink + const g = Math.floor(Math.random() * 156 + 100); // Green value between 100 and 255 + const b = Math.floor(Math.random() * 156 + 100); // Blue value between 100 and 255 + let alpha = 0.5; // Set transparency to make it softer + + // random chance of hard color + const isRand = Math.floor(100 * Math.random()); + if (isRand === 1 || isRand >= 99) { + r = Math.floor(Math.random() * 156 + 100); + alpha = 1; + } + + const backgroundColor = `rgba(${r}, ${g}, ${b}, ${alpha})`; + document.body.style.backgroundColor = backgroundColor; +} + +// Animate emotes every second +document.addEventListener('DOMContentLoaded', () => { + emotes.push(document.querySelector('.NOCLONE')); + setInterval(animateEmotes, 2000); + + const konamiCode = ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a', 'Enter']; + let userInput = []; + + let intId = setInterval(() => {userInput = []}, 3000); + + document.addEventListener('keydown', (event) => { + userInput.push(event.key); + + clearInterval(intId); + intId = setInterval(() => {userInput = []}, 3000); + + // Remove the first element if it exceeds the length + if (userInput.length > konamiCode.length) userInput.shift(); + + // Check if the userInput array matches the konamiCode + if (userInput.join('') === konamiCode.join('')) { + let gradient = document.getElementById('neonRainbowGradient'); + if (!gradient) { + gradient = document.createElement('div'); + gradient.id = 'neonRainbowGradient'; + gradient.className = 'neon-rainbow'; + document.body.appendChild(gradient); + } + else gradient.remove(); + } + else if (event.ctrlKey && event.key === 's') { + event.preventDefault(); + console.log("%cINSANITY", "color:red;font-weight:bold;font-size:100px;"); + emotes.forEach(e => e.classList.add('rotneon')); + + const container = document.querySelector("#fullscreenTextContainer"); + container.style.opacity = 1; + container.style.zIndex = 1000; + setTimeout(() => { + container.style.zIndex = 0; + container.style.opacity = 0; + }, 3000); + } + }); +}); + +// Listen for click events on emotes for possible future interactivity +document.addEventListener('click', e => { + if (e.target.classList.contains('NOCLONE')) { + const popupEl = document.getElementById('cherryBlossomPopup'); + popupEl.style.display = "block"; + popupEl.querySelector('input[type="number"]').value = emotes.length; + } + else if (e.target.classList.contains('emote')) { + const pink_clone = e.target.cloneNode(true); + document.body.appendChild(pink_clone); + + // Move the original element to the left relative to its current position + e.target.style.transform = `translateX(-${e.target.offsetWidth}px)`; + + // Move the cloned element to the right relative to the original position + pink_clone.style.transform = `translateX(${e.target.offsetWidth}px)`; + + emotes.push(pink_clone); + + } +}); \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 0000000..0126459 --- /dev/null +++ b/style.css @@ -0,0 +1,154 @@ +body { + margin: 0; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #f3f3f3; + font-family: 'Arial', sans-serif; +} + +.emote-container { + text-align: center; +} + + +.emote { + position: absolute; + border-radius: 50%; + will-change: transform; + transition: transform 1s ease, left 1s ease, top 1s ease; + cursor: pointer; +} + + +@keyframes colorShift { + 0% { filter: hue-rotate(0deg); transform: rotate(0deg); } + 50% { filter: hue-rotate(180deg); } + 100% { filter: hue-rotate(360deg); transform: rotate(360deg);;} +} + +.rotneon { + filter: brightness(150%) saturate(120%); + animation: colorShift 5s infinite; +} + +.NOCLONE { + z-index: 300; +} + + +.popup { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: none; + background-color: rgba(0, 0, 0, 0.5); + z-index: 1000; +} + +.popup-content { + position: relative; + width: 300px; + padding: 20px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + background-color: #fff; + border-radius: 10px; + text-align: center; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-image: url('cherry-blossom-bg.jpg'); /* Background image of cherry blossoms */ +} + +.close-btn { + position: absolute; + top: 10px; + right: 10px; + border: none; + background: none; + font-size: 16px; + cursor: pointer; +} + +.theme-button { + display: block; /* Makes the button block to fill the width of the container */ + margin: 10px auto; /* Automatically centers the button horizontally */ + padding: 10px 20px; + border: none; + border-radius: 5px; + background-color: pink; + color: white; + cursor: pointer; + font-size: 14px; + outline: none; + width: 90%; +} + +h2 { + color: #333; +} + +input[type="number"] { + padding: 8px; + margin-top: 10px; + border-radius: 5px; + border: 1px solid #ccc; + width: 80%; +} + +@keyframes moveGradient { + 0% { background-position: 0% 50%; } + 100% { background-position: -800% 50%; } +} + +@keyframes rotateGradient { + 0% { + transform: rotate(0deg) scale(1); + } + 100% { + transform: rotate(360deg) scale(3); + } +} + +.neon-rainbow { + height: 200vh; + width: 200vw; + position: fixed; + z-index: -1; + + background: linear-gradient(90deg, #ff0, #f0f, #00f, #0ff, #0f0, #ff0, #f00, #ff0, #ff0); + background-size: 800% 100%; + + animation: moveGradient 15s linear infinite, rotateGradient 20s linear infinite; +} + + +#fullscreenTextContainer { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + display: flex; + align-items: center; + justify-content: center; + font-size: 4em; + color: white; + opacity: 0; + transition: opacity 2s ease-in-out; + font-weight: bold; + + text-shadow: + 0 0 5px #ff5ec9, /* Glowing effect */ + 0 0 10px #fc86ab, /* Glowing effect */ + 0 0 20px #ff5ec9, /* Glowing effect */ + 0 0 40px #fc86ab; /* Glowing effect */ +} + +.hidden { + opacity: 0; +} \ No newline at end of file