var SceneSwiper = new Swiper(".SceneSwiper", { effect: "coverflow", grabCursor: true, centeredSlides: true, slidesPerView: "auto", coverflowEffect: { rotate: -40, stretch: 0, depth: 200, modifier: 1, slideShadows: true, }, keyboard: { enabled: true, }, navigation: { nextEl: ".video-next", prevEl: ".video-prev", }, loop: true, speed: 1000, allowTouchMove: true, }); let animationId; const moveSpeed = 1; function continuousScroll() { if (SceneSwiper && SceneSwiper.params) { SceneSwiper.translateTo( SceneSwiper.translate + moveSpeed, 0, false, false ); SceneSwiper.loopFix(); } animationId = requestAnimationFrame(continuousScroll); } continuousScroll(); const swiperEl = document.querySelector(".SceneSwiper"); // Pause on hover, resume on leave swiperEl.addEventListener("mouseenter", () => {cancelAnimationFrame(animationId);}); swiperEl.addEventListener("mouseleave", () => { cancelAnimationFrame(animationId); continuousScroll(); }); // Prevent click from stopping the animation swiperEl.addEventListener("click", (e) => { e.preventDefault(); e.stopPropagation(); cancelAnimationFrame(animationId); continuousScroll(); }); // Step section gsap.registerPlugin(ScrollTrigger); // 3d Gallery function initCarousel(carousel, speed) { const images = carousel.querySelectorAll('.carouselImgCard'); const total = images.length; let angle = 0; // 1. Track the current operating speed let currentSpeed = speed; // 2. Add Event Listeners for Hover carousel.addEventListener('mouseenter', () => { currentSpeed = speed * 0.2; // Slow down to 20% of original speed }); carousel.addEventListener('mouseleave', () => { currentSpeed = speed; // Restore original speed }); function positionImages() { const radius = 872.7272727272726; const currentWidth = window.innerWidth; // Calculate zoom factor: 100% at 1920px if (currentWidth > 767) { const zoomFactor = currentWidth / 1920; carousel.style.transform = `scale(${zoomFactor})`; carousel.style.transformOrigin = 'center center'; // Adjust container height proportionally to avoid massive empty space carousel.style.height = `${550 * zoomFactor}px`; } else { carousel.style.transform = 'none'; carousel.style.height = '400px'; // Mobile fallback height } images.forEach((img, i) => { const itemAngle = (360 / total) * i + angle; const rad = itemAngle * Math.PI / 180; const z = Math.cos(rad); const opacity = Math.max(0, z); const scale = 0.65 + z * 0.35; img.style.transform = ` rotateY(${itemAngle}deg) translateZ(${radius}px) scale(${scale}) `; img.style.opacity = opacity; img.style.pointerEvents = z > 0 ? "auto" : "none"; }); } function animate() { // 3. Use currentSpeed instead of the static speed parameter angle += currentSpeed; positionImages(); requestAnimationFrame(animate); } animate(); window.addEventListener('resize', positionImages); } document.addEventListener("DOMContentLoaded", () => { const carouselEl = document.getElementById("carousel1"); if (carouselEl) { initCarousel(carouselEl, 0.25); } }); // 3d Gallery ends document.querySelectorAll('[data-base-delay]').forEach(el => { const base = parseInt(el.getAttribute('data-base-delay')); const count = parseInt(el.getAttribute('data-aos-delay')); el.setAttribute('data-aos-delay', count * base); }); $(document).ready(function () { if ($('#pageModal').length) {$('#pageModal').modal('show');} }); function setActiveAnchor() { var segmentToMatch = "ramadan-campaign"; $('#menu-desktop-parent li a').each(function () { if ($(this).data('seg') === segmentToMatch) {$(this).addClass('active');} }); } function muteVideo() { let iframe = document.getElementById("youtube_vid"); if (iframe) iframe.setAttribute('src', ''); } function openNav() { const nav = document.getElementById("myNav"); if (nav) { nav.style.width = "100%"; nav.style.opacity = "1"; nav.style.visibility = "visible"; } } function closeNav() { const nav = document.getElementById("myNav"); if (nav) { nav.style.width = "0%"; nav.style.opacity = "0"; nav.style.visibility = "hidden"; } }