/**
* JavaScript súbor pre menu.html - spracovanie interaktívnych prvkov
* Autor: Adam Reňak
*/
// Čakanie na načítanie DOM obsahu
document.addEventListener('DOMContentLoaded', function() {
window.addEventListener('load', function() {
setTimeout(hideLoadingScreen, 1000); // Čaká 1 sekundu potom skryje
});
console.log('Menu načítané a pripravené na použitie');
initializeMenu();
});
/**
* Skrytie loading screen s animáciou
*/
function hideLoadingScreen() {
const loadingScreen = document.getElementById('loading-screen');
if (loadingScreen) {
loadingScreen.style.opacity = '0';
setTimeout(() => {
loadingScreen.style.display = 'none';
}, 500);
}
}
/**
* Hlavná inicializačná funkcia pre menu
*/
function initializeMenu() {
setupModalHandlers();
setupMenuButtons();
setupCharacterAnimation();
}
/**
* Nastavenie obsluhy modálnych okien (pravidlá, o projekte)
*/
function setupModalHandlers() {
// Rules modal
const rulesModal = document.getElementById('rules-modal');
const showInfoButton = document.querySelector('.show-rules');
const rulesCloseButton = rulesModal?.querySelector('.close');
// About modal
const aboutModal = document.getElementById('about-modal');
const showAboutButton = document.querySelector('.show-about');
const aboutCloseButton = aboutModal?.querySelector('.close');
// Rules modal handlers
if (rulesModal && showInfoButton && rulesCloseButton) {
showInfoButton.addEventListener('click', function(event) {
event.preventDefault();
openModal(rulesModal);
});
rulesCloseButton.addEventListener('click', function() {
closeModal(rulesModal);
});
}
// About modal handlers
if (aboutModal && showAboutButton && aboutCloseButton) {
showAboutButton.addEventListener('click', function(event) {
event.preventDefault();
openModal(aboutModal);
});
aboutCloseButton.addEventListener('click', function() {
closeModal(aboutModal);
});
}
/**
// Zatvorenie modálneho okna po kliknutí mimo obsahu
window.addEventListener('click', function(event) {
if (event.target === modal) {
console.log('Zatváram modal - klik mimo obsah');
closeModal(modal);
}
});
*/
}
/**
* Otvorenie modálneho okna s animáciou
*/
function openModal(modal) {
console.log('Otváram modal');
modal.style.display = 'block';
modal.style.opacity = '0';
setTimeout(() => {
modal.style.opacity = '1';
setupModalScrolling(modal);
}, 10);
}
/**
* Funkcia na zatvorenie modálneho okna s animáciou
* @param {HTMLElement} modal - Modal element na zatvorenie
*/
function closeModal(modal) {
modal.style.opacity = '0';
setTimeout(() => {
modal.style.display = 'none';
}, 300);
}
/**
* Nastavenie scroll funkcionalite pre modal obsah
*/
function setupModalScrolling(modal) {
// Ak nie je modal zadaný, fallback na celý dokument (pre spätnú kompatibilitu)
const scope = modal || document;
// Hľadáme elementy LEN v rámci daného modalu (nie na celej stránke)
const modalContent = scope.querySelector('.modal-text-content');
const arrowUp = scope.querySelector('.modal-arrow-up');
const arrowDown = scope.querySelector('.modal-arrow-down');
// Ak niektorý element chýba, nie je čo nastavovať
if (!modalContent || !arrowUp || !arrowDown) return;
// Funkcia na aktualizáciu vizuálneho stavu šípok
// Ak sme na vrchu, šípka hore je stlmená, ak na spodku, šípka dole je stlmená
function updateArrows() {
const isAtTop = modalContent.scrollTop <= 5;
const isAtBottom = modalContent.scrollTop + modalContent.clientHeight >= modalContent.scrollHeight - 5;
arrowUp.style.opacity = isAtTop ? '0.3' : '1';
arrowDown.style.opacity = isAtBottom ? '0.3' : '1';
}
// DÔLEŽITÉ: Listenery pridávame len raz - pri prvom otvorení tohto modalu
// Bez tejto kontroly by sa pri každom ďalšom otvorení modalu pridal ďalší listener,
// čo by spôsobilo viacnásobný scroll pri každom kliknutí na šípku
if (!modalContent.dataset.scrollInitialized) {
// Kliknutie na šípku hore - scrolluj obsah smerom nahor
arrowUp.addEventListener('click', function() {
modalContent.scrollBy({ top: -100, behavior: 'smooth' });
});
// Kliknutie na šípku dole - scrolluj obsah smerom nadol
arrowDown.addEventListener('click', function() {
modalContent.scrollBy({ top: 100, behavior: 'smooth' });
});
// Pri scrollovaní obsahu aktualizuj vizuálny stav šípok
modalContent.addEventListener('scroll', updateArrows);
// Označ tento modal ako inicializovaný aby sa listenery nepridali znova
modalContent.dataset.scrollInitialized = 'true';
}
// Pri každom otvorení modalu aktualizuj stav šípok (nech sú vizuálne správne)
updateArrows();
}
/**
* Nastavenie obsluhy menu tlačidiel
*/
function setupMenuButtons() {
const menuButtons = document.querySelectorAll('.menu-button');
menuButtons.forEach(button => {
button.addEventListener('click', function(event) {
this.style.transform = 'translateY(0) scale(0.95)';
setTimeout(() => {
this.style.transform = '';
}, 150);
});
});
}
/**
* Nastavenie animácie pre postavičku
*/
function setupCharacterAnimation() {
const characterImage = document.querySelector('.character-image');
if (!characterImage) {
console.warn('Obrázok postavičky nebol nájdený');
return;
}
// Náhodná animácia postavičky každých 5 sekúnd
setInterval(() => {
playCharacterAnimation(characterImage);
}, 5000);
// Animácia pri kliknutí na postavičku
characterImage.addEventListener('click', function() {
console.log('Klik na postavičku');
playCharacterClickAnimation(this);
playClickSound();
});
}
/**
* Prehranie animácie postavičky
* @param {HTMLElement} character - Element obrázka postavičky
*/
function playCharacterAnimation(character) {
// Jemné pokývanie postavičky
character.style.transform = 'rotate(0.093deg) scale(1.02)';
setTimeout(() => {
character.style.transform = 'rotate(-0.093deg) scale(1.02)';
}, 500);
setTimeout(() => {
character.style.transform = 'rotate(0.093deg) scale(1)';
}, 1000);
}
/**
* Animácia pri kliknutí na postavičku
* @param {HTMLElement} character - Element obrázka postavičky
*/
function playCharacterClickAnimation(character) {
character.style.transform = 'rotate(0.093deg) scale(1.1)';
setTimeout(() => {
character.style.transform = 'rotate(0.093deg) scale(1)';
}, 300);
}
/**
* Funkcia pre ladenie - výpis informácií o menu
*/
function debugMenuInfo() {
console.log('=== DEBUG INFO MENU ===');
console.log('Počet menu tlačidiel:', document.querySelectorAll('.menu-button').length);
console.log('Modal existuje:', !!document.getElementById('rules-modal'));
console.log('Postavička existuje:', !!document.querySelector('.character-image'));
console.log('========================');
}
// Spustenie debug informácií v development móde
if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {
setTimeout(debugMenuInfo, 1000);
}