/** * site_shop 상수 값 * @type {{WIDTH_MOBILE: number, SEEMORE_HEIGHT: {PC: number, MOBILE: number}, PROD_TYPE: {DIGITAL: string, SUBSCRIBE: string, NORMAL: string}, TAB_TYPE: {RETURN: string, QNA: string, REVIEW: string, DETAIL: string}}} */ const SHOP_CONST = { /** shopping default */ WIDTH_MOBILE: 768, PROD_TYPE: { NORMAL: 'normal', DIGITAL: 'digital', SUBSCRIBE: 'subscribe' }, TAB_TYPE: { DETAIL: 'detail', QNA: 'qna', REVIEW: 'review', RETURN: 'return' }, SEEMORE_HEIGHT: { PC: 1050, MOBILE: 550 }, /** cart */ CART_TYPE_NORMAL: 'normal', CART_TYPE_REGULARLY: 'regularly' }; var SITE_SHOP_DETAIL = function () { var $body; var $selected_options; var $prod_detail; var $prod_detail_content_mobile; var $prod_detail_content_pc; var $prod_detail_content_tab_mobile; var $prod_detail_return; var $prod_detail_return_mobile; var $first_photo_review_wrap; var $prod_image_list; var $prod_image_list_rolling; var $review_image_list; var $review_image_list_rolling; var $review_summary_wrap; var $review_summary_wrap_mobile; var $prod_goods_form; var $add_cart_alarm; var $confirm_order_with_cart_alarm; var $deliv_visit_wrap; var $options; var $prod_additional; var $prod_additional_options; var $prod_deliv_setting; var $wish_buttons; var selected_prod_additionals = []; var selected_options = []; /** [ {options:[{option_code:, value_code:, value_name:}], price:, count:, require:} ] */ var selected_prod_additional_options = []; /** [ {options:[{option_code:, value_code:, value_name:}], price:, count:, require:} ] */ var selected_require_options = []; /** [ { value_type:SELECT(선택형)/INPUT(입력형), option_code:, value_code:, value_name: } ] */ var selected_prod_additional_require_options = []; /** [ { value_type:SELECT(선택형)/INPUT(입력형), option_code:, value_code:, value_name: } ] */ var current_select_additional_prod_idx = 0; /** 최근 선택한 추가상품 idx(추가상품 UI 영역에 표시하기 위해 사용) **/ var require_option_count = 0; var prod_additional_require_option_count = {}; var require_input_option_count = 0; var prod_additional_require_input_option_count = {}; var current_prod_idx = 0; var prod_stock_use = false; var prod_stock = 0; var prod_stock_unlimit = false; var prod_price = 0; var order_count = 0; /** 구매할 수량 (옵션이 없는 경우에만)(*/ var isComplete = false; var current_content_tab = ''; /** detail,review,qna*/ var isUseNpMobile = false; /** 모바일 네이버페이 사용 유무*/ var $deliv_type = ''; var $deliv_pay_type = ''; /** 배송 국가 (옵션 select 커스텀 변경) */ var $deliv_country; /* 구매 수량 체크를 위한 변수 */ var max_prod_quantity = 0; var max_member_quantity = 0; var maximum_purchase_quantity_type = 'order'; var optional_limit = 0; var optional_limit_type = 'relative'; var total_price_localize_text = ''; // 총금액 다국어 코드 var add_order_progress_check = false; var use_lazy_load = true; //레이지 로드 사용여부 var tab_type = 'Y'; // pc 버전 탭 타입 var prod_type = SHOP_CONST.PROD_TYPE.NORMAL; // 상품 상세페이지 내 기획전 위젯의 cart 버튼을 클릭하여 모달을 띄우는 동작에서 // 모달이 닫힐 시 설정 값의 초기화를 위해 변수를 설정 var prod_idx_org = 0; var prod_price_org = 0; var require_option_count_org = 0; var use_lazy_load_org = true; var tab_type_org = 'Y'; var is_site_page_org = true; var prod_type_org = SHOP_CONST.PROD_TYPE.NORMAL; var is_view_price = true; var paging_type = 'st00'; var paging_default_type = 'st00'; var paging_active_type = 'st00'; var cm_data = {}; var section_code; var prod_edit_time = ''; var prod_deliv_hash = ''; var shop_view_style = ''; var handle_loadDelivSetting = 0; var prod_option_touching = false; var first_tab = ''; var use_tab_list = []; var window_width = 1920; var is_mobile_width = false; var default_options = { prod_idx: 0, prod_price: 0, require_option_count: 0, require_input_option_count: 0, use_image_optimizer_on_product_detail_markup: true, shop_use_full_load: false, is_site_page: false, prod_type: SHOP_CONST.PROD_TYPE.NORMAL, is_prod_detail_page: false, is_price_view_permission: false, cm_style: '{}', section_code: '', exist_color_option: false, is_exist_color_option_images: false, first_tab: '' }; var options = {}; var is_init_detail = false; var last_refund_data; //결제 타입 (일반, 정기구독) var cart_type; var review_page = 1; var qna_page = 1; var is_gift_buy = false; let use_cdn_optimized = false; const setImageWidthHeightBeforeLoad = async (node) => { console.time('loadTemplate') const styleFragment = window.document.createElement('style'); styleFragment.innerHTML = `@keyframes lazyload {0% {opacity: 0;} 50% {opacity: 0.1;} 100% {opacity: 0;}}` node.prepend(styleFragment); const ORIGINAL_WIDTH_HEADER_KEY = 'x-amz-meta-original-width'; const ORIGINAL_HEIGHT_HEADER_KEY = 'x-amz-meta-original-height'; const imgElements = node.querySelectorAll('img') || []; const timeoutLimit = 1000000; const checkOnceSupport = checkerlistenerOption('once'); const loadingImageJobs = Array.prototype.map.call(imgElements, (async (imgElement) => { let abortTimer = null; try { const srcOriginal = new URL(imgElement.src); const srcDefault = new URL(window.CDN_UPLOAD_URL); if (srcOriginal.host !== srcDefault.host || !srcOriginal.pathname.startsWith(srcDefault.pathname)) { throw new Error(); } // WARN: srcResized 값이 콜백 내에서 계속 변경되므로(searchParams.set) 주의 const srcResized = new URL(srcOriginal); srcResized.host = new URL(window.CDN_OPTIMIZED_URL).host; srcResized.searchParams.set('w', 0); const signal = typeof AbortSignal.timeout === 'function' ? AbortSignal.timeout(timeoutLimit) : new AbortController() if (typeof signal.abort === 'function') { abortTimer = setTimeout(signal.abort, timeoutLimit); } const imgRes = await fetch(srcResized, { method: 'HEAD', signal }); const checkResized = imgRes.headers.has(ORIGINAL_WIDTH_HEADER_KEY) && imgRes.headers.has(ORIGINAL_HEIGHT_HEADER_KEY); if ( !imgRes.ok || !checkResized ) { throw new Error(); } const meta = { originalWidth: imgRes.headers.get(ORIGINAL_WIDTH_HEADER_KEY), originalHeight: imgRes.headers.get(ORIGINAL_HEIGHT_HEADER_KEY), } const imgKey = srcResized.pathname.replace(/[^a-z\d]/g, '_'); imgElement.dataset[imgKey] = ""; const imgSelector = `img[data-${imgKey}]`; const styleFragment = window.document.createElement('style'); styleFragment.innerHTML = `${imgSelector} {opacity:0;transition:opacity 60ms ease-out;} ${imgSelector}.loaded {opacity:1;}`; imgElement.parentNode.prepend(styleFragment); srcResized.searchParams.set('w', 1920); imgElement.src = srcResized.href; imgElement.style.objectFit = 'cover'; imgElement.style.maxWidth = '100%'; imgElement.style.height = 'auto'; imgElement.width = (imgElement.width || meta.originalWidth); imgElement.height = (imgElement.height || meta.originalHeight); imgElement.sizes = '100vw'; imgElement.srcset = [1536, 1280, 1080, 828, 768, 640, 576, 368] .map((w) => { srcResized.searchParams.set('w', w); return `${srcResized.href} ${w}w`; }).join(', '); imgElement.loading = 'lazy'; imgElement.addEventListener('error', () => { imgElement.src = imgElement.dataset.original || srcOriginal.href; imgElement.classList.add('loaded'); imgElement.style.removeProperty('objectFit'); imgElement.style.removeProperty('maxWidth'); imgElement.style.removeProperty('height'); imgElement.removeAttribute('width'); imgElement.removeAttribute('height'); imgElement.removeAttribute('sizes'); imgElement.removeAttribute('srcset'); imgElement.removeAttribute('loading'); }); if (checkOnceSupport) { imgElement.addEventListener('load', () => imgElement.classList.add('loaded'), { once: true }); } else { imgElement.onload = () => imgElement.classList.add('loaded'); } } catch (e) { console.error(e); // TypeError, FetchError, AbortError, TimeoutError ... 어떤 에러든 원본 이미지로 대체 imgElement.src = imgElement.dataset.original || imgElement.src; imgElement.classList.add('loaded'); imgElement.removeAttribute('height'); } finally { if (abortTimer) { clearTimeout(abortTimer); } } })); for ( const job of loadingImageJobs ) { await job; } console.timeEnd('loadTemplate') return node; } /* option 샘플 initDetail({ prod_idx: , prod_price: , require_option_count: , use_image_optimizer_on_product_detail_markup: , shop_use_full_load: , shop_view_tab_display: , is_site_page: , prod_type: , is_prod_detail_page: , is_price_view_permission: , cm_style: , section_code: exist_color_option: is_empty_color_option_images: is_prod_wish_by_member, wish_count, is_use_wish_btn, is_show_wish_count, is_soldout, is_possible_use_gift }); */ var initDetail = function (_option) { options = $.extend({}, default_options, _option); if(typeof options.shop_view_tab_display === 'undefined') { options.shop_view_tab_display = options.shop_pc_tab_type_one_page === 'Y' ? 'Y' : 'N'; } if(typeof options.shop_tab_fixed === 'undefined') { options.shop_tab_fixed = options.shop_tab_type_unfixed !== 'Y' ? 'Y' : 'N'; } var prodIdx = options.prod_idx; var price = options.prod_price; var requireOptionCnt = options.require_option_count; var requireInputOptionCnt = options.require_input_option_count; use_lazy_load = options.use_image_optimizer_on_product_detail_markup; tab_type = options.shop_view_tab_display; var is_site_page = options.is_site_page; var _prod_type = options.prod_type; var is_prod_detail_page = options.is_prod_detail_page; var view_price = options.is_price_view_permission; var _cm_data = options.cm_style; section_code = options.section_code; prod_edit_time = options.prod_edit_time; prod_deliv_hash = options.prod_deliv_hash; shop_view_style = options.shop_view_style; first_tab = options.first_tab; use_tab_list = options.use_tab_list; window_width = window.innerWidth; is_mobile_width = (window_width < SHOP_CONST.WIDTH_MOBILE); use_cdn_optimized = options.use_cdn_optimized; $body = $('body'); if (is_prod_detail_page) { var $target_modal = $('.modal_prod_detail_from_shopping_list'); $prod_image_list = $target_modal.find('#prod_image_list'); $prod_image_list_rolling = $prod_image_list.find('div.owl-carousel'); $prod_goods_form = $target_modal.find('#prod_goods_form'); $selected_options = $target_modal.find('#prod_selected_options'); $options = $target_modal.find('#prod_options'); $prod_additional = $target_modal.find('#prod_additional'); $prod_additional_options = $target_modal.find('#prod_additional_options'); $prod_deliv_setting = $target_modal.find('#prod_deliv_setting'); $prod_detail = $target_modal.find('#prod_detail'); $prod_detail_content_pc = $prod_detail.find('._prod_detail_detail_lazy_load'); $prod_detail_content_mobile = $target_modal.find('._prod_detail_detail_lazy_load_mobile'); $prod_detail_content_tab_mobile = $target_modal.find('.categorize-mobile .site_prod_nav_wrap'); $add_cart_alarm = $target_modal.find('#shop_detail_add_cart_alarm'); $confirm_order_with_cart_alarm = $target_modal.find('#shop_detail_confirm_order_with_cart_alarm'); $deliv_visit_wrap = $target_modal.find('#deliv_visit_wrap'); $wish_buttons = $target_modal.find('._wish_button'); } else { $prod_image_list = $('#prod_image_list'); $prod_image_list_rolling = $('#prod_image_list').find('div.owl-carousel'); $prod_goods_form = $('#prod_goods_form'); $selected_options = $('#prod_selected_options'); $options = $('#prod_options'); $prod_additional = $('#prod_additional'); $prod_additional_options = $('#prod_additional_options'); $prod_deliv_setting = $('#prod_deliv_setting'); $prod_detail = $('#prod_detail'); $prod_detail_content_pc = $prod_detail.find('._prod_detail_detail_lazy_load'); $prod_detail_content_mobile = $('._prod_detail_detail_lazy_load_mobile'); $prod_detail_content_tab_mobile = $('.categorize-mobile .site_prod_nav_wrap'); $add_cart_alarm = $('#shop_detail_add_cart_alarm'); $confirm_order_with_cart_alarm = $('#shop_detail_confirm_order_with_cart_alarm'); $deliv_visit_wrap = $('#deliv_visit_wrap'); $wish_buttons = $('._wish_button'); } $prod_detail_return = $("#prod_detail_return_body"); $prod_detail_return_mobile = $("#prod_detail_return_body_mobile"); $first_photo_review_wrap = $prod_detail.find('._first_photo_review_wrap'); $review_summary_wrap = $prod_detail.find('._review_summary_wrap'); $review_summary_wrap_mobile = $prod_detail.find('._review_summary_wrap_mobile'); if (options.only_regularly) { if (!$prod_detail.hasClass('shop-style-b')) selectCartType('regularly'); } is_view_price = view_price; current_prod_idx = prodIdx; prod_price = price; require_option_count = parseInt(requireOptionCnt); require_input_option_count = parseInt(requireInputOptionCnt); selected_prod_additionals = []; selected_options = []; selected_prod_additional_options = []; selected_require_options = []; selected_prod_additional_require_options = []; prod_additional_require_option_count = {}; prod_additional_require_input_option_count = {}; prod_additional_period_discount_data = {}; prod_additional_period_dc_type = {}; current_select_additional_prod_idx = 0; isComplete = true; //isUseNpMobile = use_np_mobile; cm_data = JSON.parse(_cm_data); // 그러니까 이 값들은, 상품 상세페이지 내 기획전 위젯의 cart 버튼을 클릭하여 모달을 띄우는 동작에서 // 모달이 닫힐 시 설정 값의 초기화를 위해 사용하는 것이다. if (!is_prod_detail_page) { prod_idx_org = current_prod_idx; prod_price_org = prod_price; require_option_count_org = require_option_count; use_lazy_load_org = use_lazy_load; tab_type_org = tab_type; is_site_page_org = is_site_page; prod_type_org = _prod_type; } if (options.is_use_wish_btn) { toggleWishButtons($wish_buttons, options.wish_count, options.is_show_wish_count, options.is_prod_wish_by_member); } /* 하나의 페이지에 모든 탭 열람일 경우 상품 상세설명 HTML 세팅 */ // html설정 var is_shop_view_tab_display = (options.shop_view_tab_display == 'Y'); if (is_shop_view_tab_display) { let detail_html = null; let $seemore_wrap = null; if (use_cdn_optimized) { if (is_mobile_width) { loadTemplate('prodDetailMobile', $prod_detail_content_mobile, use_lazy_load ? setImageWidthHeightBeforeLoad : null); } else { loadTemplate('prodDetailPC', $prod_detail_content_pc, use_lazy_load ? setImageWidthHeightBeforeLoad : null); } } else { detail_html = IMWEB_TEMPLATE.loadSimple("prodDetailPC"); $prod_detail_content_pc.html(detail_html); detail_html = IMWEB_TEMPLATE.loadSimple("prodDetailMobile"); $prod_detail_content_mobile.html(detail_html); } $seemore_wrap = $body.find('._seemore_wrap'); if ($seemore_wrap.length > 0) { $seemore_wrap.show(); $prod_detail_content_pc.toggleClass('hide_seemore', false); $prod_detail_content_mobile.toggleClass('hide_seemore', false); } } if (!use_cdn_optimized) { runLazyload(); } prod_type = _prod_type; var hash_temp = location.hash.split('!/'); setTimeout(() => { switch(hash_temp[0]){ case '#prod_detail_detail': is_init_detail = true; if(is_mobile_width) SITE_SHOP_DETAIL.changeContentTab(SHOP_CONST.TAB_TYPE.DETAIL); else SITE_SHOP_DETAIL.changeContentPCTab(SHOP_CONST.TAB_TYPE.DETAIL); break; case '#prod_detail_review': is_init_detail = true; if(is_mobile_width) SITE_SHOP_DETAIL.changeContentTab(SHOP_CONST.TAB_TYPE.REVIEW); else SITE_SHOP_DETAIL.changeContentPCTab(SHOP_CONST.TAB_TYPE.REVIEW); if(hash_temp[1]){ SITE_SHOP_DETAIL.viewReviewDetail(hash_temp[1], 1, 'N', 'Y'); } break; case '#prod_detail_qna': is_init_detail = true; if(is_mobile_width) SITE_SHOP_DETAIL.changeContentTab(SHOP_CONST.TAB_TYPE.QNA); else SITE_SHOP_DETAIL.changeContentPCTab(SHOP_CONST.TAB_TYPE.QNA); if(hash_temp[1]){ SITE_SHOP_DETAIL.viewQnaDetail(hash_temp[1], 1, 'Y'); } break; case '#prod_detail_return': is_init_detail = true; if(is_mobile_width) SITE_SHOP_DETAIL.changeContentTab(SHOP_CONST.TAB_TYPE.RETURN); else SITE_SHOP_DETAIL.changeContentPCTab(SHOP_CONST.TAB_TYPE.RETURN); break; default: let target_tab = options.first_tab === "prod_detail" ? SHOP_CONST.TAB_TYPE.DETAIL : options.first_tab === "prod_review" ? SHOP_CONST.TAB_TYPE.REVIEW : options.first_tab === "prod_qna" ? SHOP_CONST.TAB_TYPE.QNA : options.first_tab === "prod_return" ? SHOP_CONST.TAB_TYPE.RETURN : ""; if(options.shop_view_tab_display === "N"){ if(is_mobile_width) { SITE_SHOP_DETAIL.changeContentTab(target_tab, review_page, qna_page, false, false); } else { SITE_SHOP_DETAIL.changeContentPCTab(target_tab, review_page, qna_page, false, false); } } checkSeemore(target_tab); is_init_detail = true; break; } /* 크리마 리뷰 사용 중일 시 위젯 호출 */ if(document.querySelector(".crema-product-reviews")){ if(typeof crema !== 'undefined'){ crema.run(); } } }, 200) if (cm_data.shop_view_buy_item_tooltip === 'Y') { $('.btn_tooltip[data-toggle="tooltip"]').tooltip({ delay: { show: 500, hide: 1000000 } }); var toggle_regularly = $("input[name='add_cart_type']"); var $tooltip = $('.btn_tooltip[data-toggle="tooltip"]'); var window_height = $(window).height(); toggle_regularly.off('change').on('change', function () { $tooltip.css({ 'opacity': '0' }); if ($(this).prop('checked')) { if ($tooltip.length > 0) { var window_height = $(window).height(); $.each($tooltip, function (k, v) { var tooltip_y = v.getBoundingClientRect().y; if (tooltip_y >= 0 && tooltip_y < window_height) { $tooltip.css({ 'opacity': '1' }); $(v).tooltip('show'); } }); } } }); if ($tooltip.length > 0) { $.each($tooltip, function (k, v) { var tooltip_y = v.getBoundingClientRect().y; if (tooltip_y >= 0 && tooltip_y < window_height) { // 툴팁이 화면 내에 보이지 않을 때 show하면 위치가 어긋나게 됨 setTimeout(function () { $(v).tooltip('show'); }, 100); } $(window).scroll(function () { if ($(v).next('.tooltip:visible').length === 0) { var tooltip_y = v.getBoundingClientRect().y; if (tooltip_y > 0 && tooltip_y < (window_height - $(v).height())) { $(v).tooltip('show'); } } }); }); } } setTimesale(); if (!is_prod_detail_page) { setImgZoom(30, 800, section_code); if ($first_photo_review_wrap.length > 0) { getFirstPhotoReview(1); } } /* resize 시 window_width 재계산 */ let is_resizing = false; window.addEventListener('resize', function () { if (!is_resizing) { is_resizing = true; setTimeout(function () { window_width = window.innerWidth; let was_mobile_width = is_mobile_width; is_mobile_width = (window_width < SHOP_CONST.WIDTH_MOBILE); if(is_mobile_width != was_mobile_width){ if(is_mobile_width){ changeContentTab(current_content_tab); }else{ /* 동영상 전체화면 시 PC 너비로 인지되는데 탭을 새로 그리면서 동영상이 다시 불러와지는 문제가 있어 예외처리 */ if (!is_shop_view_tab_display && current_content_tab === SHOP_CONST.TAB_TYPE.REVIEW) { changeContentPCTab(current_content_tab); } } // 상단 조치로 인해 lazyload가 다시 실행되지 않아서 추가 setTabHistory(current_content_tab); runLazyload(); } is_resizing = false; }, 100); } }); /* debounce로 변경 */ // const handleResize = _.debounce(function () { // window_width = window.innerWidth; // let was_mobile_width = is_mobile_width; // is_mobile_width = (window_width < SHOP_CONST.WIDTH_MOBILE /* 768w */); // if(is_mobile_width != was_mobile_width){ // if(is_mobile_width){ // changeContentTab(current_content_tab); // }else{ // /* 동영상 전체화면 시 PC 너비로 인지되는데 탭을 새로 그리면서 동영상이 다시 불러와지는 문제가 있어 예외처리 */ // if (!is_shop_view_tab_display && current_content_tab === SHOP_CONST.TAB_TYPE.REVIEW) { // changeContentPCTab(current_content_tab); // } // } // // 상단 조치로 인해 lazyload가 다시 실행되지 않아서 추가 // setTabHistory(current_content_tab); // // runLazyload(); // } // }, 100) // window.addEventListener('resize', handleResize); }; var initProdStock = function (stock_use, stock, stock_un_limit) { prod_stock_use = stock_use; prod_stock = stock; prod_stock_unlimit = stock_un_limit; }; var runLazyload = function () { if (!use_lazy_load) return false; var $seemore_wrap = $body.find('._seemore_wrap'); // [TFR-1179] 한 페이지에 전체 노출 + 순차적 로드 + 상세정보 펼쳐보기 미사용 시 순차적 로드에 의해 다른 탭 스크롤이 밀리는 현상 방지를 위해 마지막 이미지는 레이지 로드 제외 let is_except_last_lazy_load = options.shop_view_tab_display === 'Y' && $seemore_wrap.length == 0; if(is_mobile_width){ let lazy_load_selector = 'img'; if(is_except_last_lazy_load){ let last_img = $prod_detail_content_mobile.find('img:last'); last_img.attr('src', last_img.attr('data-original')).removeAttr('height'); lazy_load_selector = 'img:not(:last)'; } $prod_detail_content_mobile.find(lazy_load_selector).lazyload({ /* 상품 상세페이지 lazy load 적용, 기본 /img/no-image.png 는 한번만 불러옴 */ placeholder: NO_IMAGE_URL, threshold: 100, effect: "fadeIn", load: function () { $(this).removeAttr('height'); if ($seemore_wrap.length > 0) { // 레이지로드 이후 no-image보다 로딩된 이미지가 작아 펼쳐보기 높이 제한에 걸리지 않게 되면 펼쳐보기 해제 setTimeout(function () { if ($prod_detail_content_mobile.outerHeight() < SHOP_CONST.SEEMORE_HEIGHT.MOBILE) { $prod_detail_content_mobile.toggleClass('hide_seemore', true); checkSeemore(current_content_tab); } }, 100); } } }); }else{ let lazy_load_selector = 'img'; if(is_except_last_lazy_load){ let last_img = $prod_detail_content_pc.find('img:last'); last_img.attr('src', last_img.attr('data-original')).removeAttr('height'); lazy_load_selector = 'img:not(:last)'; } $prod_detail_content_pc.find(lazy_load_selector).lazyload({ /* 상품 상세페이지 lazy load 적용, 기본 /img/no-image.png 는 한번만 불러옴 */ placeholder: NO_IMAGE_URL, threshold: 100, effect: "fadeIn", load: function () { $(this).removeAttr('height'); if ($seemore_wrap.length > 0) { // 레이지로드 이후 no-image보다 로딩된 이미지가 작아 펼쳐보기 높이 제한에 걸리지 않게 되면 펼쳐보기 해제 setTimeout(function () { if ($prod_detail_content_pc.outerHeight() < SHOP_CONST.SEEMORE_HEIGHT.PC) { $prod_detail_content_pc.toggleClass('hide_seemore', true); checkSeemore(current_content_tab); } }, 100); } } }); } }; var setImgZoom = function (margin, max_width, section_code) { if ($('.shop_view .xzoom').length > 0) { var shop_view_xzoom = $('.shop_view .xzoom, .shop_view .xzoom-gallery').xzoom({ Xoffset: margin, openOnSmall: false, defaultScale: 0, scroll: false, custom: true, hover: true }); if (typeof shop_view_xzoom != 'undefined') { // 연관상품 장바구니 확인 후 닫을 시 재실행되면서 오류나는 문제 방지 shop_view_xzoom.eventmove = function (element) { var $xzoom_preview = $('.shop_view .xzoom-preview'); $xzoom_preview.addClass(section_code); var $xzoom_preview_img = $xzoom_preview.find('img'); var $xzoom = $('.shop_view .xzoom'); var xzoom_width = $(window).width() - ($xzoom.offset().left + $xzoom.outerWidth() + margin * 2); if (xzoom_width > max_width) { xzoom_width = max_width; } var xzoom_height = xzoom_width; var xzoom_preview_img_width = $xzoom_preview_img.outerWidth(); var xzoom_preview_img_height = $xzoom_preview_img.outerHeight(); if (xzoom_preview_img_width < xzoom_width || xzoom_preview_img_height < xzoom_height) { shop_view_xzoom.closezoom(); } else { $xzoom_preview.outerWidth(xzoom_width); $xzoom_preview.outerHeight(xzoom_height); element.bind('mousemove', shop_view_xzoom.movezoom); } $xzoom_preview.mouseover(shop_view_xzoom.closezoom); }; } } }; var setTimesale = function () { var $doz_timesale_wrap = $('#prod_goods_form ._doz_timesale_wrap'); if ($doz_timesale_wrap.length > 0) { $doz_timesale_wrap.each(function () { var $that = $(this); var $doz_timesale = $that.find('._doz_timesale'); var start_time = ($that.find('._doz_timesale').attr('data-start-time') * 1000); var timesale_interval = setInterval(function () { var remain_ms = ($doz_timesale.attr('data-end-time') * 1000) - start_time; if (remain_ms > 0) { var remain_d = Math.floor(remain_ms / 86400000); var remain_h = Math.floor((remain_ms % 86400000) / 3600000); var remain_m = Math.floor((remain_ms % 3600000) / 60000); var remain_s = Math.floor((remain_ms % 60000) / 1000); var remain_hh = remain_h < 10 ? '0' + remain_h : '' + remain_h; var remain_mm = remain_m < 10 ? '0' + remain_m : '' + remain_m; var remain_ss = remain_s < 10 ? '0' + remain_s : '' + remain_s; if (remain_d >= 1) { $doz_timesale.html(getLocalizeString('설명_상세페이지타임세일종료까지n일', [remain_d], " 종료까지 %1일")); } else { $doz_timesale.html(getLocalizeString('설명_상세페이지타임세일종료까지n1시n2분n3초남음', [remain_hh, remain_mm, remain_ss], "