HTMLify
Heart.html
Views: 539 | Author: amar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Interactive Heart Evolution</title> <style> body { font-family: Arial, sans-serif; margin: 0; overflow: hidden; /* Prevent scrolling */ background-color: #f0f8ff; display: flex; /* Flexbox for centering */ flex-direction: column; justify-content: center; /* Center vertically */ align-items: center; /* Center horizontally */ height: 100vh; /* Full viewport height */ } h1, #stage-text { color: #333; text-align: center; margin: 10px 0; } .heart { font-size: 100px; cursor: pointer; transition: transform 0.2s ease-in-out; } .heart:hover { transform: scale(1.1); } .emoji { font-size: 50px; cursor: grab; position: absolute; transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out; } .emoji:active { cursor: grabbing; } .hidden { opacity: 0; pointer-events: none; } </style> </head> <body> <h1>Interactive Heart Evolution</h1> <div id="heart" class="heart">❤️</div> <p id="stage-text" style="text-align: center;">don't use hammer!</p> <div id="emoji-container"></div> <script> const heart = document.getElementById("heart"); const stageText = document.getElementById("stage-text"); const emojiContainer = document.getElementById("emoji-container"); // Emojis with their IDs and initial visibility const emojis = [ { id: "hammer", emoji: "🔨", visible: true }, { id: "bandage", emoji: "🩹", visible: false }, { id: "clock", emoji: "⏰", visible: false }, { id: "glitter", emoji: "✨", visible: false }, { id: "ribbon", emoji: "🎀", visible: false }, ]; // Function to randomly position emojis function randomizeEmojiPosition(emojiElement) { const windowWidth = window.innerWidth; const windowHeight = window.innerHeight; // Generate random positions, leaving some margin for visibility const randomX = Math.random() * (windowWidth - 100); const randomY = Math.random() * (windowHeight - 100); emojiElement.style.left = `${randomX}px`; emojiElement.style.top = `${randomY}px`; } // Create emoji elements and add to the container emojis.forEach(({ id, emoji, visible }) => { const emojiElement = document.createElement("div"); emojiElement.id = id; emojiElement.className = `emoji ${visible ? "" : "hidden"}`; emojiElement.innerText = emoji; emojiElement.draggable = true; // Randomize its initial position randomizeEmojiPosition(emojiElement); // Add drag event handlers emojiElement.ondragstart = (event) => { event.dataTransfer.setData("text", id); }; // Append to the container emojiContainer.appendChild(emojiElement); }); // Allow the heart to accept drop events heart.ondragover = (event) => event.preventDefault(); // Handle dropping emojis on the heart heart.ondrop = (event) => { event.preventDefault(); const draggedId = event.dataTransfer.getData("text"); const emojiElement = document.getElementById(draggedId); if (draggedId === "hammer" && heart.innerText === "❤️") { heart.innerText = "💔"; // Break the heart emojiElement.classList.add("hidden"); // Remove hammer document.getElementById("bandage").classList.remove("hidden"); stageText.innerText = "Oh no! you broke the heart. Use the bandage to fix it."; } else if (draggedId === "bandage" && heart.innerText === "💔") { heart.innerText = "❤️🩹"; // Bandage the heart emojiElement.classList.add("hidden"); // Remove bandage document.getElementById("clock").classList.remove("hidden"); stageText.innerText = "The heart need to heal! Give it time."; } else if (draggedId === "clock" && heart.innerText === "❤️🩹") { heart.innerText = "❤️"; // Clock resets the heart to normal emojiElement.classList.add("hidden"); // Remove clock document.getElementById("glitter").classList.remove("hidden"); document.getElementById("ribbon").classList.remove("hidden"); stageText.innerText = "The heart is healthy now, Add some sparkle or a ribbon to it."; } else if (draggedId === "glitter" && heart.innerText === "❤️") { heart.innerText = "💖"; // Glitter heart emojiElement.classList.add("hidden"); // Remove glitter stageText.innerText = "Wow! The heart is sparkling now."; } else if (draggedId === "ribbon" && heart.innerText === "❤️") { heart.innerText = "💝"; // Ribbon heart emojiElement.classList.add("hidden"); // Remove ribbon stageText.innerText = "Beautiful! The heart is wrapped with love."; } }; // Update positions of emojis on window resize window.onresize = () => { document.querySelectorAll(".emoji").forEach(randomizeEmojiPosition); }; </script> </body> </html> |