vbrowser-modified / interative.js
AstraOS's picture
Upload 19 files
e7a4412 verified
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();
}
});