245 lines
7.6 KiB
JavaScript
245 lines
7.6 KiB
JavaScript
/**
|
|
* 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);
|
|
} |