first commit
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
// ==========================================================================
|
||||
// Konfiguracja EmailJS
|
||||
// ==========================================================================
|
||||
const EMAILJS_PUBLIC_KEY = "TxpnuzLYOz70x6lLo";
|
||||
const EMAILJS_SERVICE_ID = "service_ynkmge1";
|
||||
const EMAILJS_TEMPLATE_ID = "template_vkqg8ch";
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// Inicjalizacja EmailJS SDK jeśli podano klucz
|
||||
if (typeof emailjs !== 'undefined' && EMAILJS_PUBLIC_KEY !== "TWOJ_PUBLIC_KEY") {
|
||||
emailjs.init(EMAILJS_PUBLIC_KEY);
|
||||
}
|
||||
|
||||
const header = document.getElementById('header');
|
||||
const mobileToggle = document.getElementById('mobile-toggle');
|
||||
const navMenu = document.getElementById('nav-menu');
|
||||
const contactForm = document.getElementById('contact-form');
|
||||
const formSuccess = document.getElementById('form-success');
|
||||
const formSubmitBtn = document.getElementById('form-submit-btn');
|
||||
|
||||
// 1. Efekt przyklejonego header-a przy przewijaniu
|
||||
window.addEventListener('scroll', () => {
|
||||
if (window.scrollY > 30) {
|
||||
header.classList.add('scrolled');
|
||||
} else {
|
||||
header.classList.remove('scrolled');
|
||||
}
|
||||
});
|
||||
|
||||
// 2. Obsługa nawigacji mobilnej
|
||||
if (mobileToggle && navMenu) {
|
||||
mobileToggle.addEventListener('click', () => {
|
||||
navMenu.classList.toggle('active');
|
||||
const isExpanded = navMenu.classList.contains('active');
|
||||
mobileToggle.setAttribute('aria-expanded', isExpanded);
|
||||
});
|
||||
|
||||
document.querySelectorAll('.nav-link').forEach(link => {
|
||||
link.addEventListener('click', () => {
|
||||
navMenu.classList.remove('active');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 3. Wysyłka formularza kontaktowego przez EmailJS
|
||||
if (contactForm) {
|
||||
contactForm.addEventListener('submit', (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
const name = document.getElementById('name').value.trim();
|
||||
const email = document.getElementById('email').value.trim();
|
||||
const phone = document.getElementById('phone') ? document.getElementById('phone').value.trim() : '';
|
||||
const message = document.getElementById('message').value.trim();
|
||||
const rodo = document.getElementById('rodo');
|
||||
|
||||
if (!name || !email || !phone || !message) {
|
||||
alert('Proszę wypełnić wszystkie wymagane pola.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (rodo && !rodo.checked) {
|
||||
alert('Wymagana jest akceptacja zgody na przetwarzanie danych osobowych (RODO).');
|
||||
return;
|
||||
}
|
||||
|
||||
formSubmitBtn.disabled = true;
|
||||
formSubmitBtn.innerText = 'Wysyłanie...';
|
||||
|
||||
// Jeśli klucze są ustawione, wysyłamy przez EmailJS
|
||||
if (typeof emailjs !== 'undefined' && EMAILJS_PUBLIC_KEY !== "TWOJ_PUBLIC_KEY") {
|
||||
emailjs.sendForm(EMAILJS_SERVICE_ID, EMAILJS_TEMPLATE_ID, contactForm)
|
||||
.then(() => {
|
||||
formSubmitBtn.style.display = 'none';
|
||||
formSuccess.style.display = 'block';
|
||||
contactForm.reset();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Błąd wysyłania EmailJS:', error);
|
||||
alert('Wystąpił błąd podczas wysyłania wiadomości. Spróbuj ponownie.');
|
||||
formSubmitBtn.disabled = false;
|
||||
formSubmitBtn.innerText = 'Wyślij zapytanie o bezpłatną wycenę';
|
||||
});
|
||||
} else {
|
||||
// Tryb demonstracyjny (gdy klucze nie są jeszcze podmienione)
|
||||
setTimeout(() => {
|
||||
formSubmitBtn.style.display = 'none';
|
||||
formSuccess.style.display = 'block';
|
||||
contactForm.reset();
|
||||
}, 1000);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 4. Subtelne animacje pojawiania się przy skrolowaniu
|
||||
const observerOptions = {
|
||||
root: null,
|
||||
rootMargin: '0px',
|
||||
threshold: 0.15
|
||||
};
|
||||
|
||||
const observer = new IntersectionObserver((entries, obs) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
entry.target.style.opacity = '1';
|
||||
entry.target.style.transform = 'translateY(0)';
|
||||
obs.unobserve(entry.target);
|
||||
}
|
||||
});
|
||||
}, observerOptions);
|
||||
|
||||
const animatedElements = document.querySelectorAll('.service-card, .why-card, .stat-card');
|
||||
animatedElements.forEach(el => {
|
||||
el.style.opacity = '0';
|
||||
el.style.transform = 'translateY(20px)';
|
||||
el.style.transition = 'all 0.5s ease-out';
|
||||
observer.observe(el);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user