Spaces:
Sleeping
Sleeping
| document.addEventListener('DOMContentLoaded', () => { | |
| // Interactive Modals | |
| const interactiveItems = document.querySelectorAll('.interactive-item'); | |
| const modals = document.querySelectorAll('.interactive-modal'); | |
| const interactiveModalCloseButtons = document.querySelectorAll('.interactive-modal-close'); | |
| interactiveItems.forEach(item => { | |
| item.addEventListener('click', () => { | |
| const modalId = item.getAttribute('data-modal'); | |
| const modal = document.getElementById(modalId); | |
| if (modal) { | |
| modal.classList.add('active'); | |
| } | |
| }); | |
| }); | |
| interactiveModalCloseButtons.forEach(button => { | |
| button.addEventListener('click', () => { | |
| const modal = button.closest('.interactive-modal'); | |
| modal.classList.remove('active'); | |
| }); | |
| }); | |
| // Early Access Form | |
| const earlyAccessForm = document.getElementById('early-access-form'); | |
| if (earlyAccessForm) { | |
| earlyAccessForm.addEventListener('submit', (e) => { | |
| e.preventDefault(); | |
| const email = e.target.querySelector('input').value; | |
| const useCase = e.target.querySelector('select').value; | |
| // Here you would typically send this data to a backend service | |
| alert(`Thank you for your interest!\nEmail: ${email}\nUse Case: ${useCase}`); | |
| }); | |
| } | |
| // Learn More Button Interactions | |
| const learnMoreButtons = document.querySelectorAll('.learn-more-btn'); | |
| learnMoreButtons.forEach(button => { | |
| button.addEventListener('click', (e) => { | |
| const parentCard = e.target.closest('.experience-card, .advanced-feature'); | |
| const cardTitle = parentCard.querySelector('h3').textContent; | |
| alert(`You want to learn more about: ${cardTitle}. Detailed information coming soon!`); | |
| }); | |
| }); | |
| // New Interactive Elements | |
| const playgroundCards = document.querySelectorAll('.playground-card'); | |
| playgroundCards.forEach(card => { | |
| card.addEventListener('mouseenter', () => { | |
| const tooltip = card.getAttribute('data-tooltip'); | |
| const tooltipElement = document.createElement('div'); | |
| tooltipElement.classList.add('playground-tooltip'); | |
| tooltipElement.textContent = tooltip; | |
| card.appendChild(tooltipElement); | |
| }); | |
| card.addEventListener('mouseleave', () => { | |
| const tooltip = card.querySelector('.playground-tooltip'); | |
| if (tooltip) { | |
| card.removeChild(tooltip); | |
| } | |
| }); | |
| }); | |
| // Vision Section Modals | |
| const visionTriggers = document.querySelectorAll('.vision-trigger'); | |
| const visionModalsContainer = document.getElementById('vision-modals'); | |
| const visionModalCloseButtons = document.querySelectorAll('.modal-close'); | |
| visionTriggers.forEach(trigger => { | |
| trigger.addEventListener('click', (e) => { | |
| const card = e.target.closest('.vision-card'); | |
| const modalId = card.getAttribute('data-modal-target'); | |
| const modal = document.getElementById(modalId); | |
| if (modal) { | |
| visionModalsContainer.classList.add('active'); | |
| modal.classList.add('active'); | |
| } | |
| }); | |
| }); | |
| visionModalCloseButtons.forEach(button => { | |
| button.addEventListener('click', () => { | |
| visionModalsContainer.classList.remove('active'); | |
| const activeModal = document.querySelector('.vision-modal.active'); | |
| if (activeModal) { | |
| activeModal.classList.remove('active'); | |
| } | |
| }); | |
| }); | |
| // Dynamic Text Replacement Effect | |
| const reimagineElement = document.querySelector('.hero h1'); | |
| if (reimagineElement) { | |
| const words = ['Transformed', 'Revolutionized', 'Redefined', 'Elevated', 'Unleashed']; | |
| let currentWordIndex = 0; | |
| function animateTextReplacement() { | |
| const originalText = 'Reimagined'; | |
| const targetWord = words[currentWordIndex]; | |
| const container = document.createElement('div'); | |
| container.style.display = 'inline-block'; | |
| container.style.position = 'relative'; | |
| // Create a wrapper for the static text | |
| const staticTextSpan = document.createElement('span'); | |
| staticTextSpan.textContent = 'Experience the Web, '; | |
| reimagineElement.innerHTML = ''; | |
| reimagineElement.appendChild(staticTextSpan); | |
| reimagineElement.appendChild(container); | |
| // Cursor effect | |
| const cursor = document.createElement('span'); | |
| cursor.textContent = '_'; | |
| cursor.style.animation = 'blink 0.7s infinite'; | |
| cursor.style.marginLeft = '3px'; | |
| // Clear original text | |
| function clearText(callback) { | |
| let index = originalText.length; | |
| const clearIntervalId = setInterval(() => { | |
| container.textContent = originalText.slice(0, index); | |
| index--; | |
| if (index < 0) { | |
| clearInterval(clearIntervalId); | |
| callback(); | |
| } | |
| }, 50); | |
| } | |
| // Type new text | |
| function typeText() { | |
| let index = 0; | |
| const typeIntervalId = setInterval(() => { | |
| container.textContent = targetWord.slice(0, index + 1); | |
| index++; | |
| if (index === targetWord.length) { | |
| clearInterval(typeIntervalId); | |
| container.appendChild(cursor); | |
| // Prepare for next iteration | |
| setTimeout(() => { | |
| currentWordIndex = (currentWordIndex + 1) % words.length; | |
| animateTextReplacement(); | |
| }, 2000); | |
| } | |
| }, 100); | |
| } | |
| clearText(typeText); | |
| } | |
| // Add style for cursor blinking | |
| const style = document.createElement('style'); | |
| style.textContent = ` | |
| @keyframes blink { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0; } | |
| } | |
| `; | |
| document.head.appendChild(style); | |
| // Start the animation | |
| animateTextReplacement(); | |
| } | |
| }); |