/* Author: Emrebaris */ // Mevcut kodun en başına if ("serviceWorker" in navigator) { window.addEventListener("load", () => { navigator.serviceWorker .register("/assets/js/sw.js") .then((registration) => { console.log("ServiceWorker başarıyla kaydedildi"); }) .catch((error) => { console.log("ServiceWorker kaydı başarısız:", error); }); }); } // Global popup fonksiyonları function openPopup() { Swal.fire({ title: "Eğitimle ilgili Yorumunu Paylaş", html: `
`, showCancelButton: false, confirmButtonText: "Yorumu Gönder", confirmButtonColor: "#0091ff", confirmButtonClass: "w-100 rounded-pill", showCloseButton: true, backdrop: `rgba(0,0,0,0.7)`, width: "600px", padding: "2em", heightAuto: false, position: "center", allowOutsideClick: true, grow: "row", didOpen: () => { // Rating butonları için click event listener'ları document.querySelectorAll(".rating-btn").forEach((btn) => { btn.addEventListener("click", () => { document .querySelectorAll(".rating-btn") .forEach((b) => b.classList.remove("active")); btn.classList.add("active"); }); }); }, preConfirm: () => { const name = document.getElementById("swal-name").value; const title = document.getElementById("swal-title").value; const comment = document.getElementById("swal-comment").value; const rating = document.querySelector(".rating-btn.active")?.dataset.value; if (!name) { Swal.showValidationMessage("Lütfen isim soyisim giriniz"); return false; } if (!title) { Swal.showValidationMessage("Lütfen yorum başlığı giriniz"); return false; } if (!comment) { Swal.showValidationMessage("Lütfen yorumunuzu yazın"); return false; } if (!rating) { Swal.showValidationMessage("Lütfen bir değerlendirme puanı seçin"); return false; } return { name, title, comment, rating }; }, }).then((result) => { console.log(result); if (result.isConfirmed) { $.post( "../../comment.php", { yorum_ad_soyad: result.value.name, yorum_baslik: result.value.title, yorum_mesaj: result.value.comment, yorum_puan: result.value.rating}) .done(function( data ) { console.log(data); if (data.success) { Swal.fire({ icon: "success", title: "Teşekkürler!", text: "Yorumunuz başarıyla gönderildi.", confirmButtonColor: "#6A1B9A", }); } else { Swal.fire({ title: data.message, icon: "warning", confirmButtonText:"Tamam" }); } }); } }); } (function () { //===== Prealoder window.onload = function () { window.setTimeout(fadeout, 500); }; function fadeout() { document.querySelector(".preloader").style.opacity = "0"; document.querySelector(".preloader").style.display = "none"; } /*===================================== Sticky ======================================= */ window.onscroll = function () { var header_navbar = document.querySelector(".navbar-area"); var sticky = header_navbar.offsetTop; var logo = document.querySelector(".navbar-brand img"); if (window.pageYOffset > sticky) { header_navbar.classList.add("sticky"); //logo.src = "assets/images/logo/logo.svg"; } else { header_navbar.classList.remove("sticky"); //logo.src = "assets/images/logo/white-logo.svg"; } // show or hide the back-top-top button var backToTo = document.querySelector(".scroll-top"); if ( document.body.scrollTop > 50 || document.documentElement.scrollTop > 50 ) { backToTo.style.display = "flex"; } else { backToTo.style.display = "none"; } }; // section menu active function onScroll(event) { var sections = document.querySelectorAll(".page-scroll"); var scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; for (var i = 0; i < sections.length; i++) { var currLink = sections[i]; var val = currLink.getAttribute("href"); var refElement = document.querySelector(val); var scrollTopMinus = scrollPos + 73; if ( refElement.offsetTop <= scrollTopMinus && refElement.offsetTop + refElement.offsetHeight > scrollTopMinus ) { document.querySelector(".page-scroll").classList.remove("active"); currLink.classList.add("active"); } else { currLink.classList.remove("active"); } } } window.document.addEventListener("scroll", onScroll); // for menu scroll var pageLink = document.querySelectorAll(".page-scroll"); pageLink.forEach((elem) => { elem.addEventListener("click", (e) => { e.preventDefault(); document.querySelector(elem.getAttribute("href")).scrollIntoView({ behavior: "smooth", offsetTop: 1 - 60, }); }); }); // WOW active new WOW().init(); let filterButtons = document.querySelectorAll( ".portfolio-btn-wrapper button" ); filterButtons.forEach((e) => e.addEventListener("click", () => { let filterValue = event.target.getAttribute("data-filter"); iso.arrange({ filter: filterValue, }); }) ); var elements = document.getElementsByClassName("portfolio-btn"); for (var i = 0; i < elements.length; i++) { elements[i].onclick = function () { var el = elements[0]; while (el) { if (el.tagName === "BUTTON") { el.classList.remove("active"); } el = el.nextSibling; } this.classList.add("active"); }; } //===== mobile-menu-btn let navbarToggler = document.querySelector(".mobile-menu-btn"); navbarToggler.addEventListener("click", function () { navbarToggler.classList.toggle("active"); }); // Scroll opacity effect for experience title function handleExperienceTitleOpacity() { const experienceTitle = document.querySelector("#experienceTitle"); if (!experienceTitle) return; const rect = experienceTitle.getBoundingClientRect(); const viewHeight = Math.max( document.documentElement.clientHeight, window.innerHeight ); // Elementin viewport'a göre pozisyonunu hesapla const elementFromTop = rect.top; const elementHeight = rect.height; // Opacity değerini hesapla let opacity = 0; if (elementFromTop < viewHeight) { // Element viewport'a girdiğinde opacity artmaya başlar opacity = 1 - elementFromTop / viewHeight; // Opacity değerini 0 ile 1 arasında tut opacity = Math.min(Math.max(opacity, 0), 1); // Daha yumuşak bir geçiş için easing fonksiyonu opacity = Math.pow(opacity, 0.5); } experienceTitle.style.opacity = opacity; } // Scroll event listener'ı ekle window.addEventListener("scroll", handleExperienceTitleOpacity); // Sayfa yüklendiğinde de çalıştır window.addEventListener("load", handleExperienceTitleOpacity); // Scroll opacity effect for experience title function handleDescriptionOpacity() { const description = document.querySelector("#meb-description"); if (!description) return; const rect = description.getBoundingClientRect(); const viewHeight = Math.max( document.documentElement.clientHeight, window.innerHeight ); // Elementin viewport'a göre pozisyonunu hesapla const elementFromTop = rect.top; const elementHeight = rect.height; // Opacity değerini hesapla let opacity = 0.1; if (elementFromTop < viewHeight) { // Element viewport'a girdiğinde opacity artmaya başlar opacity = 1 - elementFromTop / viewHeight; // Opacity değerini 0 ile 1 arasında tut opacity = Math.min(Math.max(opacity, 0), 1); // Daha yumuşak bir geçiş için easing fonksiyonu opacity = Math.pow(opacity, 0.5); } description.style.opacity = opacity; } // Scroll event listener'ı ekle window.addEventListener("scroll", handleDescriptionOpacity); // Sayfa yüklendiğinde de çalıştır window.addEventListener("load", handleDescriptionOpacity); // Counter Up function startCounter() { const counters = document.querySelectorAll(".odometer"); counters.forEach((counter) => { const target = parseInt(counter.getAttribute("data-count")); let current = 0; const increment = target / 50; // Artış hızı const updateCounter = () => { if (current < target) { current += increment; counter.textContent = Math.ceil(current); setTimeout(updateCounter, 40); // Güncelleme hızı } else { counter.textContent = target; } }; // Counter'ı başlat updateCounter(); }); } // Counter'ları viewport'a girdiklerinde başlat const observerOptions = { root: null, rootMargin: "0px", threshold: 0.1, }; const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { startCounter(); observer.unobserve(entry.target); } }); }, observerOptions); // Achievement section'ı gözlemle const achievementSection = document.querySelector(".our-achievement"); if (achievementSection) { observer.observe(achievementSection); } // Play button click handler document.querySelectorAll(".play-button").forEach((button) => { button.addEventListener("click", () => { // Video oynatma fonksiyonu buraya gelecek console.log("Video started"); }); }); // Menü ikonu SVG template'i const menuIconSVG = ` `; // HTML'de menü butonunu seç ve SVG'yi ekle document.addEventListener("DOMContentLoaded", function () { const menuButton = document.querySelector(".mobile-menu-btn"); menuButton.innerHTML = menuIconSVG; }); // Menü animasyonu document.addEventListener("DOMContentLoaded", function () { const menuButton = document.getElementById("globalnav-menutrigger-button"); menuButton.addEventListener("click", function () { const isExpanded = this.getAttribute("aria-expanded") === "true"; const topOpenAnim = document.getElementById( "globalnav-anim-menutrigger-bread-top-open" ); const topCloseAnim = document.getElementById( "globalnav-anim-menutrigger-bread-top-close" ); const bottomOpenAnim = document.getElementById( "globalnav-anim-menutrigger-bread-bottom-open" ); const bottomCloseAnim = document.getElementById( "globalnav-anim-menutrigger-bread-bottom-close" ); if (!isExpanded) { topOpenAnim.beginElement(); bottomOpenAnim.beginElement(); this.setAttribute("aria-label", "Close"); } else { topCloseAnim.beginElement(); bottomCloseAnim.beginElement(); this.setAttribute("aria-label", "Menu"); } }); }); // Scroll opacity effect window.addEventListener("scroll", function () { const scrollElements = document.querySelectorAll(".scroll-fade"); const windowHeight = window.innerHeight; const scrollY = window.scrollY; scrollElements.forEach((element) => { const elementTop = element.getBoundingClientRect().top + scrollY; const elementVisible = elementTop - scrollY <= windowHeight * 0.75; if (elementVisible) { element.classList.add("active"); } else { element.classList.remove("active"); } }); }); // Sayfa yüklendiğinde de kontrol et window.addEventListener("load", function () { const event = new Event("scroll"); window.dispatchEvent(event); }); // Specialist Slider document.addEventListener("DOMContentLoaded", () => { const specialistSlider = new KeenSlider("#specialist-slider", { slides: { origin: "center", perView: 2.4, spacing: 20, }, initial: 1, loop: false, centered: true, created: (instance) => { updateSlides(instance); }, slideChanged: (instance) => { updateSlides(instance); }, breakpoints: { "(max-width: 2400px)": { slides: { perView: 4.2, spacing: 20, origin: "center", }, }, "(max-width: 1400px)": { slides: { perView: 3.4, spacing: 20, origin: "center", }, }, "(max-width: 768px)": { slides: { perView: 1.2, spacing: 10, origin: "center", }, }, }, }); function updateSlides(instance) { const slides = instance.slides; const activeIndex = instance.track.details.rel; const isMobile = window.innerWidth <= 768; slides.forEach((slide, idx) => { const isCenter = idx === activeIndex; if (isMobile) { // Mobil görünüm if (isCenter) { slide.style.opacity = "1"; slide.style.transform = "scale(1)"; } else { slide.style.opacity = "0.5"; slide.style.transform = "scale(0.85)"; } } else { // Desktop görünüm if (isCenter) { slide.style.flex = "0 0 60%"; slide.style.opacity = "1"; slide.style.transform = "scale(1)"; } else { slide.style.flex = "0 0 20%"; slide.style.opacity = "0.5"; slide.style.transform = "scale(0.85)"; } } }); } // Navigation butonlarını bağla document .querySelector(".specialist-prev") .addEventListener("click", () => specialistSlider.prev()); document .querySelector(".specialist-next") .addEventListener("click", () => specialistSlider.next()); }); // Features Slider document.addEventListener("DOMContentLoaded", () => { const featuresSlider = new KeenSlider("#features-slider", { slides: { perView: 4.3, spacing: 24, }, initial: 0, loop: false, breakpoints: { "(max-width: 1400px)": { slides: { perView: 3.5, spacing: 20, }, }, "(max-width: 1200px)": { slides: { perView: 2.5, spacing: 20, }, }, "(max-width: 768px)": { slides: { perView: 1.2, spacing: 20, }, }, }, created: (s) => { // Gezinme düğmelerini bağla document .querySelector(".features-prev") ?.addEventListener("click", () => s.prev()); document .querySelector(".features-next") ?.addEventListener("click", () => s.next()); }, }); }); document .querySelector(".features-nav .nav-prev") .addEventListener("click", () => { featuresSlider.prev(); }); document .querySelector(".features-nav .nav-next") .addEventListener("click", () => { featuresSlider.next(); }); document .querySelector(".globalnav-menutrigger-button") .addEventListener("click", function () { const isOpen = this.classList.toggle("active"); if (isOpen) { document .querySelector("#globalnav-anim-menutrigger-bread-bottom-open") .beginElement(); document .querySelector("#globalnav-anim-menutrigger-bread-top-open") .beginElement(); this.setAttribute("aria-label", "Close"); } else { document .querySelector("#globalnav-anim-menutrigger-bread-bottom-close") .beginElement(); document .querySelector("#globalnav-anim-menutrigger-bread-top-close") .beginElement(); this.setAttribute("aria-label", "Menu"); } }); // FAQ Accordion document.querySelectorAll(".faq-button").forEach((button) => { button.addEventListener("click", () => { const faqItem = button.parentElement; const content = faqItem.querySelector(".faq-content"); const isActive = faqItem.classList.contains("active"); // Tüm panelleri kapat document.querySelectorAll(".faq-item").forEach((item) => { item.classList.remove("active"); item.querySelector(".faq-content").style.height = "0px"; }); // Tıklanan paneli aç if (!isActive) { faqItem.classList.add("active"); content.style.height = content.scrollHeight + "px"; } }); }); // Countdown Timer function startCountdown() { const days = document.getElementById("days"); const hours = document.getElementById("hours"); const minutes = document.getElementById("minutes"); let d = 1; // Başlangıç değerleri let h = 59; let m = 12; let s = 0; function updateDisplay() { // Saniyeyi azalt s--; // Saniye sıfır olduğunda dakikayı azalt if (s < 0) { s = 59; m--; // Dakika sıfır olduğunda saati azalt if (m < 0) { m = 59; h--; // Saat sıfır olduğunda günü azalt if (h < 0) { h = 23; d--; // Gün sıfır olduğunda sayacı resetle if (d < 0) { d = 1; h = 59; m = 12; s = 0; } } } } // Görüntüyü güncelle days.textContent = d.toString(); hours.textContent = h.toString().padStart(2, "0"); minutes.textContent = m.toString().padStart(2, "0"); } // Her saniye güncelle setInterval(updateDisplay, 1000); } // Sayfa yüklendiğinde başlat if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", startCountdown); } else { startCountdown(); } (function () { const second = 1000, minute = second * 60, hour = minute * 60, day = hour * 24; //I'm adding this section so I don't have to keep updating this pen every year :-) //remove this if you don't need it let today = new Date(), dd = String(today.getDate()).padStart(2, "0"), mm = String(today.getMonth() + 1).padStart(2, "0"), yyyy = today.getFullYear(), nextYear = yyyy + 1, dayMonth = "09/30/", birthday = dayMonth + yyyy; today = mm + "/" + dd + "/" + yyyy; if (today > birthday) { birthday = dayMonth + nextYear; } //end const countDown = new Date(birthday).getTime(), x = setInterval(function () { const now = new Date().getTime(), distance = countDown - now; (document.getElementById("days").innerText = Math.floor( distance / day )), (document.getElementById("hours").innerText = Math.floor( (distance % day) / hour )), (document.getElementById("minutes").innerText = Math.floor( (distance % hour) / minute )), (document.getElementById("seconds").innerText = Math.floor( (distance % minute) / second )); //do something later when date is reached if (distance < 0) { document.getElementById("headline").innerText = "Promotion ends in"; document.getElementById("countdown").style.display = "none"; document.getElementById("content").style.display = "block"; clearInterval(x); } //seconds }, 0); }); })();