$(document).ready(function () { function processFlexBoxesOnce($scope, callback) { var flexBoxes = $scope.find('.flex_box').addBack('.flex_box').filter(function () { return !$(this).data('layout-loaded'); // 중복 방지 }); var layoutNumbers = []; flexBoxes.each(function (index) { var $box = $(this); var layout = $box.attr('data-layout'); if (!layout) { layout = layoutNumbers.length + 1; $box.attr('data-layout', layout); } layoutNumbers.push(layout); $box.data('layout-loaded', true); }); if (!layoutNumbers.length) { if (callback) callback(); return; } $.ajax({ url: g5_url + '/rb/rb.config/ajax.layout_set.shop.php', method: 'POST', dataType: 'json', data: { layouts: layoutNumbers }, success: function (response) { flexBoxes.each(function () { var $box = $(this); var layout = $box.attr('data-layout'); var html = response[layout]; if (html !== undefined) { $box.html(html); } }); if (callback) callback(); }, error: function () { console.error('레이아웃 로드 실패'); if (callback) callback(); } }); } // ✅ 1차 처리 → 2차로 전체 한 번 더 훑어서 놓친 거 있으면 추가 처리 processFlexBoxesOnce($('body'), function () { processFlexBoxesOnce($('body'), function () { setTimeout(function () { if (typeof initializeAllSliders === "function") initializeAllSliders(); if (typeof initializeCalendar === "function") initializeCalendar(); }, 50); }); }); }); function initializeAllSliders() { $('.rb_swiper').each(function () { const $slider = $(this); setupResponsiveSlider($slider); }); } function setupResponsiveSlider($rb_slider) { let swiperInstance = null; // Swiper 인스턴스 저장 let currentMode = ''; // 현재 모드 ('pc' 또는 'mo') // 초기 설정 function initSlider(mode) { const isMobile = mode === 'mo'; const rows = parseInt($rb_slider.data(isMobile ? 'mo-h' : 'pc-h'), 10) || 1; const cols = parseInt($rb_slider.data(isMobile ? 'mo-w' : 'pc-w'), 10) || 1; const gap = parseInt($rb_slider.data(isMobile ? 'mo-gap' : 'pc-gap'), 10) || 0; const swap = $rb_slider.data(isMobile ? 'mo-swap' : 'pc-swap') == 1; const slidesPerView = rows * cols; // 슬라이드 재구성 및 간격 설정 configureSlides($rb_slider, slidesPerView, cols, gap); // Swiper 초기화 if (swiperInstance) { swiperInstance.destroy(true, true); // 기존 Swiper 삭제 } swiperInstance = new Swiper($rb_slider.find('.rb_swiper_inner')[0], { slidesPerView: 1, initialSlide: 0, spaceBetween: gap, resistanceRatio: 0, touchRatio: swap ? 1 : 0, autoplay: $rb_slider.data('autoplay') == 1 ? { delay: parseInt($rb_slider.data('autoplay-time'), 10) || 3000, disableOnInteraction: false, } : false, navigation: { nextEl: $rb_slider.find('.rb-swiper-next')[0], prevEl: $rb_slider.find('.rb-swiper-prev')[0], }, }); } // 슬라이드 구성 및 재구성 function configureSlides($rb_slider, view, cols, gap) { const widthPercentage = `calc(${100 / cols}% - ${(gap * (cols - 1)) / cols}px)`; $rb_slider.find('.rb_swiper_list').css('width', widthPercentage); // 기존 슬라이드 그룹화 제거 if ($rb_slider.find('.rb_swiper_list').parent().hasClass('rb-swiper-slide')) { $rb_slider.find('.swiper-slide-duplicate').remove(); $rb_slider.find('.rb_swiper_list').unwrap('.rb-swiper-slide'); } // 슬라이드 그룹화 let groupIndex = 0; $rb_slider.find('.rb_swiper_list').each(function (index) { $(this).addClass('rb_swiper_group' + Math.floor(index / view)); groupIndex = Math.floor(index / view); }).promise().done(function () { for (let i = 0; i <= groupIndex; i++) { $rb_slider.find('.rb_swiper_group' + i).wrapAll('
'); $rb_slider.find('.rb_swiper_group' + i).removeClass('rb_swiper_group' + i); } }); // 간격 설정 $rb_slider.find('.rb-swiper-slide').css({ 'gap': `${gap}px`, }); // 마지막 요소 오른쪽 간격 제거 $rb_slider.find('.rb_swiper_list').each(function (index) { if ((index + 1) % cols === 0) { $(this).css('margin-right', '0'); } }); } // 반응형 설정 function checkModeAndInit() { const winWidth = window.innerWidth; const mode = winWidth <= 1024 ? 'mo' : 'pc'; if (currentMode !== mode) { currentMode = mode; initSlider(mode); // 모드 변경 시 재초기화 } } // 초기 실행 및 이벤트 등록 $(window).on('load resize', checkModeAndInit); checkModeAndInit(); // 첫 실행 }