Spaces:
Running
Running
Upload 8 files
Browse files- src/views/InstructorView.js +16 -5
src/views/InstructorView.js
CHANGED
|
@@ -250,14 +250,18 @@ export function setupInstructorEvents() {
|
|
| 250 |
const cards = container.querySelectorAll('.group\\/card');
|
| 251 |
|
| 252 |
cards.forEach(card => {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 253 |
// Random Emoji
|
| 254 |
const emoji = emojis[Math.floor(Math.random() * emojis.length)];
|
| 255 |
const emojiEl = document.createElement('div');
|
| 256 |
emojiEl.textContent = emoji;
|
| 257 |
-
//
|
| 258 |
-
emojiEl.className = 'absolute -top-
|
| 259 |
emojiEl.style.animationDuration = '0.6s';
|
| 260 |
-
|
| 261 |
|
| 262 |
// Remove after 3s
|
| 263 |
setTimeout(() => emojiEl.remove(), 3000);
|
|
@@ -316,9 +320,16 @@ export function setupInstructorEvents() {
|
|
| 316 |
|
| 317 |
// 1. Container for Relative Positioning
|
| 318 |
const relativeContainer = document.createElement('div');
|
| 319 |
-
relativeContainer.className = 'relative w-full h-[600px] md:h-[700px] overflow-hidden rounded-3xl bg-gray-900/50 border border-gray-700/30 shadow-inner';
|
| 320 |
container.appendChild(relativeContainer);
|
| 321 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 322 |
// 2. Instructor Section (Absolute Center)
|
| 323 |
const instructorSection = document.createElement('div');
|
| 324 |
instructorSection.className = 'absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 flex flex-col items-center justify-center z-20 group cursor-pointer';
|
|
@@ -425,7 +436,7 @@ export function setupInstructorEvents() {
|
|
| 425 |
</div>
|
| 426 |
|
| 427 |
<!-- Monster Image -->
|
| 428 |
-
<div class="relative w-20 h-20 md:w-24 md:h-24 flex items-center justify-center transform group-hover/card:scale-125 transition-transform duration-300" style="animation: float 3s ease-in-out infinite; animation-delay: -${floatDelay}s;">
|
| 429 |
<div class="w-full h-full pixel-art drop-shadow-md filter group-hover/card:brightness-110 transition-all">
|
| 430 |
${generateMonsterSVG(monster)}
|
| 431 |
</div>
|
|
|
|
| 250 |
const cards = container.querySelectorAll('.group\\/card');
|
| 251 |
|
| 252 |
cards.forEach(card => {
|
| 253 |
+
// Find the monster image container
|
| 254 |
+
const imgContainer = card.querySelector('.monster-img-container');
|
| 255 |
+
if (!imgContainer) return;
|
| 256 |
+
|
| 257 |
// Random Emoji
|
| 258 |
const emoji = emojis[Math.floor(Math.random() * emojis.length)];
|
| 259 |
const emojiEl = document.createElement('div');
|
| 260 |
emojiEl.textContent = emoji;
|
| 261 |
+
// Position: Top-Right of the *Image*, slightly overlapping
|
| 262 |
+
emojiEl.className = 'absolute -top-2 -right-2 text-2xl animate-bounce z-50 drop-shadow-md transform rotate-12';
|
| 263 |
emojiEl.style.animationDuration = '0.6s';
|
| 264 |
+
imgContainer.appendChild(emojiEl);
|
| 265 |
|
| 266 |
// Remove after 3s
|
| 267 |
setTimeout(() => emojiEl.remove(), 3000);
|
|
|
|
| 320 |
|
| 321 |
// 1. Container for Relative Positioning
|
| 322 |
const relativeContainer = document.createElement('div');
|
| 323 |
+
relativeContainer.className = 'relative w-full h-[600px] md:h-[700px] overflow-hidden rounded-3xl bg-gray-900/50 border border-gray-700/30 shadow-inner flex items-center justify-center';
|
| 324 |
container.appendChild(relativeContainer);
|
| 325 |
|
| 326 |
+
// Watermark
|
| 327 |
+
const watermark = document.createElement('div');
|
| 328 |
+
watermark.className = 'absolute bottom-6 right-8 text-gray-500/30 text-lg md:text-xl font-bold pointer-events-none z-0 font-mono tracking-widest select-none';
|
| 329 |
+
const d = new Date();
|
| 330 |
+
watermark.textContent = `[${d.getFullYear()}.${String(d.getMonth() + 1).padStart(2, '0')}.${String(d.getDate()).padStart(2, '0')}] VibeCoding 怪獸成長營`;
|
| 331 |
+
relativeContainer.appendChild(watermark);
|
| 332 |
+
|
| 333 |
// 2. Instructor Section (Absolute Center)
|
| 334 |
const instructorSection = document.createElement('div');
|
| 335 |
instructorSection.className = 'absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 flex flex-col items-center justify-center z-20 group cursor-pointer';
|
|
|
|
| 436 |
</div>
|
| 437 |
|
| 438 |
<!-- Monster Image -->
|
| 439 |
+
<div class="monster-img-container relative w-20 h-20 md:w-24 md:h-24 flex items-center justify-center transform group-hover/card:scale-125 transition-transform duration-300" style="animation: float 3s ease-in-out infinite; animation-delay: -${floatDelay}s;">
|
| 440 |
<div class="w-full h-full pixel-art drop-shadow-md filter group-hover/card:brightness-110 transition-all">
|
| 441 |
${generateMonsterSVG(monster)}
|
| 442 |
</div>
|