test / scripts.js
TheGreatUnknown's picture
Create scripts.js
156366e verified
raw
history blame
3.85 kB
import { config } from './config.js';
document.addEventListener('DOMContentLoaded', () => {
// Elements
const symbols = document.querySelectorAll('.symbol');
const textPanels = document.querySelectorAll('.text-panel');
const prevBtn = document.getElementById('prev-btn');
const nextBtn = document.getElementById('next-btn');
const progressDots = document.querySelectorAll('.progress-dot');
const video = document.getElementById('background-video');
// Set initial state
let currentStage = 0;
const totalStages = symbols.length;
// Update CSS variables from config
document.documentElement.style.setProperty('--intimate-color', config.colors.intimate);
document.documentElement.style.setProperty('--universal-color', config.colors.universal);
document.documentElement.style.setProperty('--divine-color', config.colors.divine);
document.documentElement.style.setProperty('--transition-time', `${config.transitionTime}s`);
// Background video settings
video.style.opacity = config.background.opacity;
// Initialize the first stage
updateStage();
// Event listeners
prevBtn.addEventListener('click', navigateToPrevious);
nextBtn.addEventListener('click', navigateToNext);
progressDots.forEach(dot => {
dot.addEventListener('click', (e) => {
const index = parseInt(e.target.dataset.index);
goToStage(index);
});
});
// Keyboard navigation
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowLeft') navigateToPrevious();
if (e.key === 'ArrowRight') navigateToNext();
});
// Automatic progression if enabled
let autoProgressInterval;
if (config.autoProgress.enabled) {
startAutoProgress();
}
function startAutoProgress() {
autoProgressInterval = setInterval(() => {
if (currentStage < totalStages - 1) {
navigateToNext();
} else {
goToStage(0);
}
}, config.autoProgress.interval);
}
// Navigation functions
function navigateToNext() {
if (currentStage < totalStages - 1) {
currentStage++;
updateStage();
}
}
function navigateToPrevious() {
if (currentStage > 0) {
currentStage--;
updateStage();
}
}
function goToStage(index) {
if (index >= 0 && index < totalStages) {
currentStage = index;
updateStage();
}
}
function updateStage() {
// Update symbols
symbols.forEach((symbol, index) => {
if (index === currentStage) {
symbol.classList.add('active');
} else {
symbol.classList.remove('active');
}
});
// Update text panels
textPanels.forEach((panel, index) => {
if (index === currentStage) {
panel.classList.add('active');
} else {
panel.classList.remove('active');
}
});
// Update progress dots
progressDots.forEach((dot, index) => {
if (index === currentStage) {
dot.classList.add('active');
} else {
dot.classList.remove('active');
}
});
// Update buttons
prevBtn.disabled = currentStage === 0;
nextBtn.disabled = currentStage === totalStages - 1;
// Set background color based on current stage
let currentColor;
switch(currentStage) {
case 0:
currentColor = config.colors.intimate;
break;
case 1:
currentColor = config.colors.universal;
break;
case 2:
currentColor = config.colors.divine;
break;
}
// Apply subtle color overlay to background
document.getElementById('background').style.boxShadow = `inset 0 0 100px ${currentColor}33`;
// Reset auto-progression timer if enabled
if (config.autoProgress.enabled) {
clearInterval(autoProgressInterval);
startAutoProgress();
}
}
});