var upwardsLocked = false // JQ 功能擴增 $.fn.triggerAll = function(list) { return this.each(function() { const $this = $(this) $.each(list.split(' '), function(key, val) { $this.trigger(val) }) }) } window.alert = function(message){ genePopup({ cls:'theme-alert theme-narrow', content: message }, true) } /** * * @param {object} data * @param {string} [data.cls] 額外class * @param {string} [data.title] 標題 * @param {string} [data.content] 內容 * @param {*} alert */ function genePopup(data, alert=false){ //產生彈窗 $("body").append(` `) } // 裝置判斷 function DeviceIsTouch() { const userAgent = navigator.userAgent const regexp = /Android|iPhone|SymbianOS|Windows Phone|iPad|iPod|Touch|Mobile|Tablet|BlackBerry/gi return !!userAgent.match(regexp) } //接收非主站alert $(window).on('pageshow', function(e){ let alertText = sessionStorage.getItem("backAlert") if(sessionStorage.getItem("backAlert")){ alert(alertText) sessionStorage.removeItem("backAlert") } }) // resize 裝置判斷 ;(function($) { $(window).on('resize', function(e) { if(DeviceIsTouch()) { $('body').removeClass('DeviceWithHover') } else { $('body').addClass('DeviceWithHover') } }) })($) //定義css變數 --vh 避免行動裝置vh計算異常(會被瀏覽器address bar影響) $(function(){ function setVh(){ $('html').attr('style', `--vh: ${window.innerHeight * 0.01}px;`) } setVh() $(window).on('resize', setVh) }) // 天邊跑馬燈設定 ;(function($) { const marqueeTarget = $(".top-marquee") if(marqueeTarget.length && marqueeTarget.children('.marquee-item').length > 1) { marqueeTarget.owlCarousel({ items: 1, nav: false, dots: false, autoplay: true, autoplayTimeout: 5000, autoplaySpeed: 1000, autoplayHoverPause: true, animateIn: 'theme-in', animateOut: 'theme-out', mouseDrag: false, loop: true, }); } //跑馬燈倒數模式 if($('.top-marquee .countdown-box').length) { $('.top-marquee .countdown-box').each(function(){ countDown($(this)) }) } function leadingZero(number) { const num = parseInt(number) if(!isNaN(num)) { if(Math.abs(num) < 10) { return "0" + Math.abs(num) } else { return String(Math.abs(num)) } } else { console.error('輸入格式錯誤') } } function countdownBox(number, string = null) { const numberStr = leadingZero(number) let returnStr = '
' + numberStr + '
' if(string) { return returnStr + '
' + string + '
' } else { return returnStr } } function countDown(target) { const leftTime = target.attr('data-second') if(leftTime > 0) { const leftSec = leftTime % 60 const leftMin = Math.floor(leftTime / 60) % 60 const leftHour = Math.floor(leftTime / 60 / 60) % 24 const leftDate = Math.floor(leftTime / 60 / 60 / 24) if(leftDate > 0) { target.html(`
${countdownBox(leftDate, _jsLang.天)}
${countdownBox(leftHour, _jsLang.時)}
${countdownBox(leftMin, _jsLang.分)}
${countdownBox(leftSec, _jsLang.秒)}
`) } else { target.html(`
${countdownBox(leftHour, _jsLang.時)}
${countdownBox(leftMin, _jsLang.分)}
${countdownBox(leftSec, _jsLang.秒)}
`) } target.attr('data-second', leftTime - 1) setTimeout(countDown, 1000, target) } else { $(".top-marquee").hide(); $("body").addClass("no-marquee") } } })($) // 螢幕滾動 ;(function($) { let lastScrolltop = 0 $(window).on('scroll', function(e) { let currentScrolltop = $(this).scrollTop() //console.log(currentScrolltop) if(currentScrolltop > 0){ $('.gotop').fadeIn(400) $("body").addClass('is-sticky'); }else{ $('.gotop').fadeOut(400) $("body").removeClass('is-sticky'); } if(currentScrolltop > lastScrolltop){ $("body").removeClass('is-upwards'); }else{ $("body").addClass('is-upwards'); } lastScrolltop = currentScrolltop }) })($) // 主選單 ;(function($) { let navbarStep = '' //避免在中間重新整理時menu高度異常 $(window).on('resize', function(e) { if($(this).width() >= 1200 && navbarStep !== "desktop") { navbarStep = "desktop" $('body').removeClass('menu-open overflow-hidden'); $('body').off('click', '.navbar-toggle') $('.navbar-main').off('click', '.main-menu .navbar-arrow') .find('.with-children').removeClass('in-active') $('.navbar-wrapper').off('click.closemenu') } else if($(this).width() < 1200 && navbarStep !== "mobile") { navbarStep = "mobile" $('body').on('click', '.navbar-toggle', function(e) { e.preventDefault() $('body').toggleClass('menu-open overflow-hidden'); $('.aside-panel, .function-item').removeClass('in-active'); }) $('.navbar-main').on('click', '.main-menu .navbar-arrow', function(e) { $(this).closest('.with-children').toggleClass('in-active') .siblings('.with-children').removeClass('in-active') }) $('.navbar-wrapper').on('click.closemenu', function(e){ if($(e.target).hasClass("navbar-wrapper")){ $('body').removeClass('menu-open overflow-hidden'); $('.aside-panel, .function-item').removeClass('in-active'); } }) } }) })($) // gotop ;(function($) { $('.gotop').on('click', function(e){ e.preventDefault() $("html, body").animate({scrollTop: 0},800); }); })($) // ========================================================== // owl carousel 樣式校正 // ========================================================== ;(function($) { function dotsCheck(jqElement) { const thisTarget = jqElement const checkTarget = thisTarget.find('.owl-dots') if(!checkTarget.hasClass('disabled')) { thisTarget.addClass('with-dots') } else { thisTarget.removeClass('with-dots') } } $('body').on('refreshed.owl.carousel', '.owl-carousel.with-dots', function(e) { dotsCheck($(this)) }) })($) // ========================================================== // footer menu toggle // ========================================================== ;(function($, jQuery, window, document) { let footerMenuStep = ''; $(window).on('resize', function(e) { if($(this).width() >= 1200 && footerMenuStep !== 'desktop') { footerMenuStep = 'desktop' $('.footer-menu').off('click', '.menu-title').find('.menu-item').removeClass('in-active') } else if($(this).width() < 1200 && footerMenuStep !== 'mobile') { footerMenuStep = 'mobile' $('.footer-menu').on('click', '.menu-title', function(e) { e.preventDefault() $(this).parent('.menu-item').toggleClass('in-active') .siblings('.menu-item').removeClass('in-active') }) } }) })($, jQuery, window, document) // ========================================================== // 通用跳窗功能 // ========================================================== ;(function($) { $(document).on("click", ".popup-trigger", function(){ let _this = $(this) let target = _this.data("target") $(".popupBox-wrapper[data-index=" + target + "]").removeClass("hide") }) $('body').on('click', '.popupBox-wrapper:not(.close-disabled)', function(e) { let popup = $(this) if(e.currentTarget === e.target || $(e.target).hasClass('closer') || $(e.target).parent().hasClass('closer') || $(e.target).hasClass('js-popupBox-closer')) { e.preventDefault() if($(e.target).closest(".popupBox-wrapper").hasClass("popupBox-constant")){ $(e.target).closest(".popupBox-wrapper").addClass("hide") }else{ PopupCloseAnimate($(e.currentTarget)) } popup.trigger("popupClose") } }) })($) // ========================================================== // 再買一次 // ========================================================== ;(function($) { //再買一次 $(document).on("click",".Order_Again",function(){ const order_num = $(this).data("order"); $.ajax({ url:Project_Country+"member/ajax/ajax_order_again.php", type:"POST", data:{order_num:order_num,}, dataType:'json', error:function(d){ alert('網路連線過慢,網頁請重新整理'); }, success:function(d) { if(d.status != 'ok') { alert(d.msg); } else { alert(d.msg); if(d.dataLayer)eval(d.dataLayer); window.location.href = d.url; } } }); }); })($) // ========================================================== // 快速購物跳窗 // ========================================================== ;(function($) { let commonShopcartStep = false $('body').on('click', '.QuickShop', function(e) { e.preventDefault() if(!commonShopcartStep) { commonShopcartStep = true jQuery.ajax({ url: Project_Country + 'ajax/ajax_popup_shopbox.php', type: 'POST', dataType: 'html', data: { SID: $(this).attr('SID'), Serial: $(this).attr('serial'), Amount: $(this).parent().find('.amountBox').val(), }, }).done(function(res){ if(res.indexOf('window.location.href=') == 0) { eval(res); } else { $('body').addClass('overflow-hidden').append(res) const slideTarget = $('.quickShop-box .preview-slide') } }).fail(function(x, y, z) { console.log(x) }).always(function() { commonShopcartStep = false }) } }) })($) // 列表更多資訊開關 ;(function($) { $('main').on('click', '.toggle-expand', function(e) { //e.preventDefault(); if(!$(e.target).closest(".toggle-pass").length > 0){ let parent = $(this).closest('.table-row') if(parent.hasClass("in-expand")){ $(".table-row").removeClass('in-expand') }else{ $(".table-row").removeClass('in-expand') parent.addClass('in-expand') parent.prev(".table-row-normal").addClass('in-expand') parent.next(".table-notebook").addClass('in-expand') } } }) })($) // ========================================================== // 側欄選單開關 // ========================================================== ;(function($) { /*$('.aside-panel').on('click', 'a', function(e) { if($(this).parent().hasClass('with-children')) { e.preventDefault() $(this).parent('.with-children').toggleClass('in-active') .siblings('.with-children').removeClass('in-active') } })*/ $(document).on("click", ".panel-head", function(){ $(this).toggleClass("in-collapse") }) $(document).on("click", ".fixed-aside", function(e){ let _this = $(this) if($(e.target).hasClass("fixed-aside")){ _this.find(".close").click() } }) $('.menu-switch').on('click', function(e){ e.preventDefault() $(this).parents('.with-children').eq(0).toggleClass('in-active') .siblings('.with-children').removeClass('in-active') }) $('.aside-panel').on('click', '.collapse-title', function(e) { e.preventDefault() $(this).parent('.item').toggleClass('in-active') //.siblings('.item').removeClass('in-active') }) })($) // ========================================================== // header功能開關 // ========================================================== ;(function($) { $(document).on("click", ".func-link", function(e){ let _this = $(this) let item = _this.closest(".func-item") if(item.length > 0){ if(item.hasClass("in-open")){ item.removeClass("in-open") $(document).off("click.closeFunc") }else{ $(".func-item").removeClass("in-open") item.addClass("in-open") $(document).on("click.closeFunc", function(e){ if(!$(e.target).closest(".func-item").length){ $(".func-item").removeClass("in-open") $(document).off("click.closeFunc") } }) } } }) })($) // ========================================================== // footer 訂閱電子報功能 // ========================================================== ;(function($) { if($('#EpaperForm').length) { $("body").on('submit', '#EpaperForm', function(e){ e.preventDefault() const enter_str = check_tools.checkEmailNull($("#Epaper_Email")); if( enter_str == "NULL" ){ alert(_jsLang.請輸入Email); return false; }else if( enter_str == "ERROR" ){ alert(_jsLang.您輸入的Email格式錯誤); return false; }else if( enter_str == "PASS" ){ $.ajax({ url: Project_Country + 'include/ajax/ajax_epaper-p.php', type: 'POST', dataType: 'JSON', data: { Epaper_Email: $("#Epaper_Email").val() }, }) .done(function(res) { const status = res.status if(status === "ORDER") { alert(_jsLang.訂閱電子報成功); } else if (status === "CANCEL") { alert(_jsLang.取消訂閱電子報成功); } else if (status === "Usable") { alert(_jsLang.訂閱電子報成功優惠券序號已寄送至您的信箱); } else if(status === "ERROR") { alert(_jsLang.取消訂閱電子報失敗); } }) .fail(function(x, y, z) { console.log(x); }) .always(function() { $("#Epaper_Email").val(''); }); } }); } })($) // ========================================================== // 購物車簡易浮動跳窗 // ========================================================== function FloatShopcart(res) { const returnDOM = `
${res}
` return returnDOM } ;(function($) { const shopcartTarget = $('#Shop_Cart_Total') let CanShowShopcart = true function getTopCart(type = '1'){ if(CanShowShopcart) { CanShowShopcart = false $.ajax({ url: Project_Country + "ajax/ajax_get_cart.php", data:{ Cart_Type : type }, type: 'POST', dataType: 'HTML', }) .done(function(res) { if(res){ if(shopcartTarget.find(".float-shopcart").length > 0){ shopcartTarget.find(".float-shopcart").empty().html(res) }else{ shopcartTarget.append(FloatShopcart(res)) } }else{ shopcartTarget.children('.float-shopcart').remove() } }) .fail(function(x, y, z) { console.log(x); }) .always(function() { CanShowShopcart = true }); } } let enterFlag = false shopcartTarget.on('mouseenter', function(e) { if(!enterFlag){ enterFlag = true getTopCart() } })/*.on('mouseleave', function(e) { shopcartTarget.children('.float-shopcart').remove() enterFlag = false })*/ $(document).on("click", ".float-shopcart .switch-btn", function(){ getTopCart($(this).data("type")) }) // 浮動窗中商品刪除 $('body').on('click', '.Left_Top_Del', function(e) { e.preventDefault() // if(confirm(_jsLang.確定刪除嗎+"?")){ $.ajax({ url: Project_Country + "shopcart/ajax/ajax_cart_del.php", type:"POST", cache:false, dataType:'json', data:{ID:$(this).attr("sid"),Type:$(this).data("type")}, }).done(function(d){ if(d.Status == 'RET_SUCCESS'){ // alert(_jsLang.刪除成功); window.location.reload(); }else{ alert(_jsLang.資料庫忙線中); } }).fail(function(d){ alert('網路連線過慢,網頁請重新整理'); }) // } }) $(document).on("click", ".common-amount-btn", function(){ console.log("g") let _this = $(this) let box = _this.parents(".common-amount-box") let input = box.find(".common-amount-input") let plus = box.find(".common-amount-plus") let minus = box.find(".common-amount-minus") let min = parseInt(input.attr("min")) let max = parseInt(input.attr("max")) let val = parseInt(input.val()) //紀錄原始值和錯誤時還原 input.data("before-change", val) if(_this.hasClass("common-amount-plus")){ if(val < max){ input.val(val + 1) //_this.addClass("in-loading") input.trigger("change") } }else{ if(val > min){ input.val(val - 1) //_this.addClass("in-loading") input.trigger("change") } } if(parseInt(input.val()) == min){ minus.addClass("in-disabled") }else{ minus.removeClass("in-disabled") } if(parseInt(input.val()) == max){ plus.addClass("in-disabled") }else{ plus.removeClass("in-disabled") } }) $(document).on("change", ".common-amount-input", function(){ console.log("e") let input = $(this) let box = input.parents(".common-amount-box") let plus = box.find(".common-amount-plus") let minus = box.find(".common-amount-minus") let min = parseInt(input.attr("min")) let max = parseInt(input.attr("max")) let val = parseInt(input.val()) if(!val){ input.val(min) } if(val > max){ input.val(max) } if(val < min){ input.val(min) } if(parseInt(input.val()) == min){ minus.addClass("in-disabled") }else{ minus.removeClass("in-disabled") } if(parseInt(input.val()) == max){ plus.addClass("in-disabled") }else{ plus.removeClass("in-disabled") } box.trigger("amountChange") }) let updateTimerFloat = null $(document).on("amountChange", ".float-shopcart .cart-amount-box", function(){ clearTimeout(updateTimerFloat) let input = $(this).find(".common-amount-input") updateTimerFloat = setTimeout(function(){ console.log("d") updateCartAmount(input, $.extend({}, $(this).data(), { sid:input.attr("sid"), prodType:input.attr("prodType"), type:input.attr("addType") || 'normal', value: input.val() }), function(){ getTopCart($(".switch-btn.in-active").data("type")) }) },500) }) $(document).on("focusin", ".quick-input", function(){ console.log("f") $(this).data("before-change", $(this).val()) }) $(document).on("input", ".quick-input", function(){ let val = this.value.replace(/\D/g,'') //let originVal = $(this).data("before-change") this.value = val //? parseInt(val, 10) : (parseInt(originVal) ?? 0) console.log("b") console.log($(this).val()) console.log($(this).data("before-change")) }) //快速數量加減(連動購物車) $(document).on("click", ".quick-product-amount .quick-btn", function(){ let _this = $(this) let box = _this.parents(".quick-product-amount") let input = box.find(".quick-input") let plus = box.find(".quick-plus") let minus = box.find(".quick-minus") let min = parseInt(input.attr("min")) let max = parseInt(input.attr("max")) let val = parseInt(input.val()) console.log("c") //紀錄原始值和錯誤時還原 input.data("before-change", val) if(_this.hasClass("quick-plus")){ if(val < max){ input.val(val + 1) //_this.addClass("in-loading") input.trigger("change") } }else{ if(val > min){ input.val(val - 1) //_this.addClass("in-loading") input.trigger("change") } } if(parseInt(input.val()) == 0){ //連動後會移除商品 //_this.addClass("in-loading") input.trigger("change") } if(parseInt(input.val()) == max){ plus.addClass("in-disabled") }else{ plus.removeClass("in-disabled") } }) $(document).on("change", ".quick-input", function(){ let input = $(this) let box = input.parents(".quick-product-amount") let plus = box.find(".quick-plus") let minus = box.find(".quick-minus") let min = parseInt(input.attr("min")) let max = parseInt(input.attr("max")) let val = parseInt(input.val()) console.log("a") if(!val && val !== 0){ input.val(min) } if(val > max){ input.val(max) } if(val < min){ input.val(min) } if(parseInt(input.val()) == max){ plus.addClass("in-disabled") }else{ plus.removeClass("in-disabled") } box.find(".quick-current").text(input.val()) box.trigger("amountChange") }) let updateTimer = null $(document).on("amountChange", ".quick-product-amount:not(.js-modified)", function(){ //js-modified用於非通用處理 let box = $(this) clearTimeout(updateTimer) updateTimer = setTimeout(function(){ let input = box.find(".quick-input") let val = parseInt(input.val()) if(!val && val !== 0){ val = input.data("before-change") || 0 } updateCartAmount(input,$.extend({}, box.data(), { sid:input.attr("sid"), prodType:input.attr("prodType"), type:input.attr("addType") || 'normal', value: input.val() }), function(){ updateAmountBox(box, val) }) }, 500) }) $(document).on("click", ".quick-product-amount.theme-round", function(e){ let _this = $(this) let input = _this.find(".quick-input") if($(e.target).closest(".popup-trigger").length){ //貨到通知 return false } if(!_this.hasClass("theme-link")){ _this.removeClass("theme-round") } if(input.val() <= 0){ //預設+1 _this.find(".quick-plus").trigger("click") } $(document).on("click.quick_amount", function(e){ if($(e.target).closest(".quick-product-amount").length <= 0){ _this.addClass("theme-round") if(_this.find(".quick-input").val() > 0){ _this.addClass("theme-amount") }else{ _this.removeClass("theme-amount") } $(document).off("click.quick_amount") } }) }) })($) function FloatCartPopup(dataObj) { const shopcartTarget = $('#Shop_Cart_Total') $.ajax({ url : Project_Country + "ajax/ajax_get_cart.php", type : "POST", async : true, cache : false, data : dataObj, }).done(function(res) { shopcartTarget.append(FloatShopcart(res)) setTimeout(function(){ shopcartTarget.children('.float-shopcart').remove() },3000); }).fail(function(x, y, z) { console.log(x) }) } //通用數量加減 function updateCartAmount(amountInput, data, callback = null){ console.log("h") $.ajax({ url: Project_Country + "shopcart/ajax/ajax_update_num.php", type:"POST", cache:false, dataType:'json', data:data }).done(function(d){ if(d.Status == 'RET_SUCCESS'){ if(d.TotalNum){ $(".cart-total").text(d.TotalNum) } if(d.DataLayer)eval(d.DataLayer); if(callback && typeof callback == 'function'){ callback(d) } }else{ if(amountInput.data("before-change")){ amountInput.val(amountInput.data("before-change")) }else{ amountInput.val(0) } if(d.Alert){ alert(d.Alert); }else{ alert("發生錯誤"); } } }).fail(function(d){ if(amountInput.data("before-change")){ amountInput.val(amountInput.data("before-change")) }else{ amountInput.val(0) } alert('網路連線過慢,網頁請重新整理'); }).always(function(){ //右上快捷購物會覆蓋所以不移除 避免數字回退 //amountInput.parents(".quick-product-amount").find(".in-loading").removeClass("in-loading") }) } function updateAmountBox(box, val){ let minusIcon = box.find(".icon-minus") let trashIcon = box.find(".icon-trash") if(val > 1){ minusIcon.removeClass("hide") trashIcon.addClass("hide") }else{ minusIcon.addClass("hide") trashIcon.removeClass("hide") } if(!val || val <= 0){ box.addClass("theme-round") box.removeClass("theme-amount") } let praentBox = box.parents(".product-item-act") if(praentBox.length){ //活動商品 if(val > 0){ praentBox.addClass("theme-picked") }else{ praentBox.removeClass("theme-picked") } } } // ========================================================== // 影片預設圖 to iframe 撥放器 // ========================================================== ;(function($) { $(document).on('click', '.StaticVideo', function(e) { e.preventDefault() const targetVID = $(this).attr('data-vid') const targetType = $(this).attr('data-type') let videoChild = '' switch(targetType) { case 'youtube': default: videoChild = `` break; case 'facebook': videoChild = `` break; } $(this).parents('.responsive-embed').html(videoChild) }) })($) // 商品大小格切換 ;(function($) { if($('.switch-group').length) { const themeAry = [] $('.switch-group').find('.switch-item').each(function(i, ele) { const themeItem = $(ele).attr('data-target') themeAry.push(themeItem) }) $('.switch-group').on('click', '.switch-item', function(e) { const targetClass = $(this).data('target') $(this).addClass('now') .siblings('.switch-item').removeClass('now') $(this).parents('main').find('.items-list').removeClass(themeAry.join(' ')).addClass(targetClass) }) } })($) // ========================================================== // 商品規格評論區塊腳本 // ========================================================== ;(function($) { // 輪播功能 let productReviewStep = '' $(window).on('resize commentUpdate', function(e) { if($(window).width() >= 1200) { productReviewStep = 'desktop' $('.content-pics').each(function(i, ele) { if($(ele).children().length > 0) { $(ele).owlCarousel({ margin: 16, nav: true, dots: false, navText: ['', ''], responsive: { 0: { items: 3 }, } }) } }); } else if($(window).width() < 1200) { productReviewStep = 'mobile' $('.content-pics').each(function(i, ele) { if($(ele).data('owl.carousel')) { $(ele).data('owl.carousel').destroy() } }); } }) // 放大圖 $(document).on('click', '.content-pics .OpenSlide', function(e) { e.preventDefault() $('body').addClass('overflow-hidden') const targetPic = $(this).attr('href'); const targetGroup = $(this).attr('group') const targetStep = $(this).attr('data-step') const groupAry = $(this).parents('.content-pics').find('[group=' + targetGroup + ']') const slideAry = [] groupAry.each(function(i, ele) { const pushString = $(ele).attr('href') slideAry.push(pushString) }); // console.log(slideAry) const appendSlides = slideAry.reduce(function(prev, ele, i) { const thisStr = `
` return prev + thisStr }, '') const appendChild = ` ` $('body').append(appendChild) }) // 滑動到評價區塊 $(document).on('click', '#Go_Comment', function(e) { e.preventDefault() const clickTarget = $(this).attr('data-target') if($(clickTarget).length) { const scrollTop = $(clickTarget).offset().top - $('.header-wrapper').height() $(clickTarget).trigger('click') $('html, body').animate({ scrollTop }, 750) } }) updateAsideProductNum() })($) // ========================================================== // 桌機版商品放大功能 // ========================================================== ;(function($) { /*if(!DeviceIsTouch()) { $(document).on('click', '.zoom-link', function(e) { e.preventDefault() }).on('mouseenter', '.zoom-link', function(e) { e.preventDefault() const thisPic = $(this).attr('href') $(this).before(` `) }).on('mousemove', '.zoom-link', function(e) { e.preventDefault() const targetImg = $(this).siblings('.zoomin-picture') const targetCursor = $(this).siblings('.zoomin-cursor') const imgHeight = $(targetImg).height() const imgWidth = $(targetImg).width() $(targetImg).css({ top: (e.offsetY / $(this).height() * imgHeight * -1 + e.offsetY), left: (e.offsetX / $(this).width() * imgWidth * -1 + e.offsetX) }) $(targetCursor).css({ top: e.offsetY, left: e.offsetX }) }).on('mouseleave', '.zoom-link', function(e) { e.preventDefault() $(this).siblings('.zoomin-picture, .zoomin-cursor').remove() }) }*/ })($) // ========================================================== // 摺疊table開關功能 // ========================================================== ;(function($) { $(document).on('click', '.CollapseToggle', function(e) { e.preventDefault() const $targetBox = $(this).parents('.table-row') if($targetBox.hasClass('table-controls')) { $targetBox.toggleClass('in-expand'); } else { $targetBox.prev('.table-controls').toggleClass('in-expand'); } }) })($) // ========================================================== // 通用型滑動到指定位置 // ========================================================== ;(function($) { $(document).on('click', '.ScrollToTarget', function(e) { e.preventDefault() const scrollTarget = $(this).attr('data-target') if($(scrollTarget).length) { const scrollTop = $(scrollTarget).offset().top - $('.header-wrapper').height() $('html, body').animate({ scrollTop }, 750) } }) })($) // ========================================================== // 商品詳細區塊切換頁籤 // ========================================================== ;(function($) { $(document).on("click", ".detail-tabs .tab-btn", function(){ let _this = $(this) let target = _this.data("target") if(!_this.hasClass("in-active")){ $(".tab-btn, .tab-content").removeClass("in-active") _this.addClass("in-active") $(".tab-content[data-type='" + target + "']").addClass("in-active") } }) })($) // ========================================================== // 密碼顯示切換 // ========================================================== ;(function($) { $(document).on('click', '.password-toggle', function(e) { e.preventDefault() const target = $(this).siblings('input') const targetType = target.attr('type') $(this).find('.icon').toggleClass('icon-eye').toggleClass('icon-eye-slash') if(targetType === 'password') { target.attr('type', 'text') } else if(targetType === 'text') { target.attr('type', 'password') } }) })($) /*影片效果*/ function videoBox(){ //影片控制 $(document).on('click','.videoControl',function(e){ e.preventDefault() const targetVideo = $($(this).attr('data-target'))[0] if(targetVideo.paused){ $(this).find('.fa').addClass('fa-pause').removeClass('fa-play'); targetVideo.play(); } else { $(this).find('.fa').addClass('fa-play').removeClass('fa-pause'); targetVideo.pause(); } }); // //影片預覽圖 // if(document.getElementById("Video")){ // document.getElementById("Video").oncanplay=function(){ // var video = $("#Video").get(0); // var canvas = document.getElementById("video_review"); // canvas.getContext('2d').drawImage(video, 0, 0, 66, 92); // }; // } } function LeadingZero(input, strLength = 2) { let str = String(input) if(str.length < strLength) { str = '0' + str // console.log(str) return LeadingZero(str, strLength) } else { return str } } function CountdownTimer(limitTime, runFunc = () => false) { const now = Date.now() if(limitTime > now) { const leftTimes = limitTime - now const leftSec = Math.floor(leftTimes / 1000) % 60 const leftMin = Math.floor(leftTimes / 1000 / 60) % 60 const leftHour = Math.floor(leftTimes / 1000 / 60 / 60) runFunc(` ${_jsLang.倒數} ${LeadingZero(leftHour)}:${LeadingZero(leftMin)}:${LeadingZero(leftSec)} `) setTimeout(CountdownTimer, 1000, limitTime, runFunc) } else { runFunc(`${_jsLang.活動結束}`) } } function CountDown(secondsTarget, runFunc = () => false) { const seconds = secondsTarget.attr('second') if(seconds > 0) { const leftSec = Math.floor(seconds / 1) % 60 const leftMin = Math.floor(seconds / 1 / 60) % 60 const leftHour = Math.floor(seconds / 1 / 60 / 60) runFunc(` ${_jsLang.倒數} ${LeadingZero(leftHour)}:${LeadingZero(leftMin)}:${LeadingZero(leftSec)} `) secondsTarget.attr('second', seconds - 1) setTimeout(CountDown, 1000, secondsTarget, runFunc) } else { runFunc(`${_jsLang.活動結束}`) } } // 關閉跳窗特效 function PopupCloseAnimate(jqElement) { if(jqElement.hasClass("popupBox-constant")){ jqElement.addClass("hide") }else{ jqElement.remove() } $('body').removeClass('overflow-hidden') } // 客製化 alert popup function AlertPop(obj) { const setting = { backgroundColor: '', color: '', icon: '', string: '', } if(obj) { Object.assign(setting, obj) } let customStyle = '' customStyle += (setting.backgroundColor)? `background-color: ${setting.backgroundColor};`: '' customStyle += (setting.color)? `color: ${setting.color};`: '' const alertStyle = (customStyle)? `style="${customStyle}"`: '' const customIcon = (setting.icon)? `${setting.icon}`: ''; const alertElement = `
${customIcon}

${setting.string}

` $('body').addClass('overflow-hidden').append(alertElement) const alertTarget = $('.alert-wrapper') setTimeout(function() { PopupCloseAnimate(alertTarget) }, 1500) } // 自定義 confirm popup function ConfirmPop(obj) { const setting = { titleName: '', titleColor: '', string: '', trueFunction: () => false, falseFunction: () => false, extraClass: '', } if(obj) { Object.assign(setting, obj) } const titleStyle = (setting.titleColor)? `class="confirm-title" style="color: ${setting.titleColor};"`: `class="confirm-title font-primary"` const confirmTitle = (setting.titleName)? `

${setting.titleName}

`: '' const confirmElement = ` ` $('body').addClass('overflow-hidden').append(confirmElement) $('.confirm-popup').on('click', '.btn', function(e) { e.preventDefault() let returnValue = false const targetWrap = $(this).parents('.confirm-popup') PopupCloseAnimate(targetWrap) if($(this).attr('data-value') === 'true') { returnValue = true } else { returnValue = false } return (returnValue)? setting.trueFunction(): setting.falseFunction() }) } // ========================================================== // 複製連結 // ========================================================== $(function(){ $(document).on("click", ".copy-btn", function(e){ window.navigator.clipboard.writeText($(this).data("link")) alert("複製連結成功") }) }) $(function(){ $(".HITS_BT").on("click",function(e){ e.preventDefault(); if( $.isNumeric($(this).attr('hid')) && $.isNumeric($(this).attr('hdid')) ){ var hid = $(this).attr('hid'); var hdid = $(this).attr('hdid'); var url = $(this).attr('href'); var target = $(this).attr('target'); $.ajax({ url:Project_Country+"ajax/ajax_add_ad_hits-p.php", type:"POST", cache:false, async:false, data:{Hid: hid , Hdid : hdid}, error:function(d){ alert('網路連線過慢,網頁請重新整理'); }, success:function(d){ if(url){ if(target == '_blank'){ window.open(url); }else if( ( typeof target === 'undefined' ) || (target == '') ){ window.location = url; }else{ } } } }); }else{ alert(_jsLang.這是錯誤的連結); } }); }) // ========================================================== // 滾動事件節流 // ========================================================== function throttleScroll(func, time, scrollBox = $(window)){ let throttleFlag = false function throttle(method ,currentScroll){ if(throttleFlag){ return false } throttleFlag = true setTimeout(function(){ //currentScroll為當前滾動的容器 method(currentScroll) throttleFlag = false }, time) } let tempFunc = function(){ throttle(func, $(this)) } return { init: function(){ scrollBox.on('scroll', tempFunc) }, destroy: function(){ scrollBox.off('scroll', tempFunc) } } } //單行商品 function simpleProductList(list){ if($(window).width() > 1199 && list.find(".item").length > 4){ list.owlCarousel({ nav: true, loop: false, margin: 20, dots: false, animateIn: 'fadeIn', animateOut: 'fadeOut', items: 4, navText: ['', ''], }) }else{ list.trigger("destroy.owl.carousel") } } function simpleProductListSide(list){ if($(window).width() > 1199 && list.find(".item").length > 3){ list.owlCarousel({ nav: true, loop: false, margin: 20, dots: false, animateIn: 'fadeIn', animateOut: 'fadeOut', items: 3, navText: ['', ''], }) }else{ list.trigger("destroy.owl.carousel") } } // ========================================================== // 橫向滾動 // ========================================================== ;(function($) { //避免全局綁定 $(".horizontal-wheel").on("wheel", function(e){ let _this = $(this) // let scrollLeft = _this.scrollLeft() let scrollWidth = this.scrollWidth let clientWidth = this.clientWidth if(scrollWidth > clientWidth){ e.preventDefault() this.scrollLeft += e.originalEvent.deltaY } }) })($) // ========================================================== // 更新側欄總商品數量 // ========================================================== function updateAsideProductNum(){ let num = $("#Ajax_Total").val() if((num || num === '0') && $(".products-filter-num").length){ $(".products-filter-num").text(`(篩選出: ${num})`) } } // ========================================================== // 商品展示區塊輪播、商品圖預覽功能、手機版放大功能、購物跳窗 // ========================================================== ;(function($) { let previewStep = '' videoBox() $(document).on('click', '.moreview .picitem', function(e) { e.preventDefault() let _this = $(this) const hoverTarget =_this.attr('data-target') const funcWrap = _this.parents('.preview-side') _this.parents('.moreview') .find('.picitem').removeClass('now') _this.addClass('now') funcWrap.find('.item-box').removeClass('now') funcWrap.find(hoverTarget).addClass('now') //手機時滾動到螢幕中間 if($(window).width() < 1200){ _this[0].scrollIntoView({ behavior:"smooth", block:"nearest", inline: "center" }) } }) $(window).on('resize', function(e) { if($(this).width() >= 1200 && previewStep !== 'desktop') { previewStep = 'desktop' // 輪播 if($('.preview-side .productImg').data('owl.carousel')) { $('.preview-side .productImg').data('owl.carousel').destroy() } // 預覽圖 hover 事件 $(document).on('mouseenter', '.moreview .picitem', function(e) { e.preventDefault() const hoverTarget = $(this).attr('data-target') const funcWrap = $(this).parents('.preview-side') funcWrap.find(hoverTarget).addClass('in-hover') .siblings('.item-box').removeClass('in-hover') }).on('mouseleave', '.moreview', function(e) { e.preventDefault() const funcWrap = $(this).parents('.preview-side') funcWrap.find('.item-box').removeClass('in-hover') }) $(document).off("click.mobileNav", ".picitem") } else if($(this).width() < 1200 && previewStep !== 'mobile') { previewStep = 'mobile' // 輪播 if($('.preview-side .productImg').children().length > 0) { $('.preview-side .productImg').addClass('with-dots').owlCarousel({ items: 1, dots: true, nav: false, //navText: ['', ''], loop: false, margin:10 }) } // 預覽圖 hover 事件 $(document).off('mouseenter', '.moreview .picitem') .off('mouseleave', '.moreview') // 預覽圖 click 事件 //$('.moreview').off('click', '.picitem') $(document).on("click.mobileNav", ".picitem", function(){ let _this = $(this) let index = _this.index() $('.preview-side .productImg').trigger("to.owl.carousel", [index,100]) }) } }) //$(window).trigger("resize") // moreview 輪播 function moreviewSwiper(){ $(".product-detail").each(function(){ let swiperItem let moreview = $(this).find('.moreview').eq(0) if(moreview.find(".swiper").length){ swiperItem = moreview.find(".swiper")[0].swiper } if($(window).width() >= 1200){ if(!swiperItem){ moreview.wrapInner('
') .find('.picitem').wrap('
') // moreview.append(` // // // `) const swiper = new Swiper('.moreview .swiper', { // navigation: { // nextEl: '.swiper-button-next', // prevEl: '.swiper-button-prev', // }, breakpoints: { 0: { slidesPerView: 4.5, spaceBetween: 12, }, 1400: { slidesPerView: 5.5, spaceBetween: 16, }, }, on: { click: function(swiper, event){ const clickedIndex = swiper.clickedIndex const visibleSlides = swiper.slidesPerViewDynamic() const firstVisibleIndex = swiper.activeIndex const lastVisibleIndex = firstVisibleIndex + Math.floor(visibleSlides) - 1 //倒數第二個完整item if((clickedIndex <= firstVisibleIndex) || (clickedIndex >= lastVisibleIndex)){ swiper.slideTo(clickedIndex - (Math.floor(visibleSlides) / 2 - 1)) } } } }) } }else{ if(swiperItem){ swiperItem.destroy(true, true) let items = moreview.find(".picitem").detach() moreview.empty() moreview.append(items) } } }) } moreviewSwiper() $(window).on("resize", function(){ moreviewSwiper() }) $(document).on("moreviewUpdate", ".moreview", function(){ moreviewSwiper() }) $(window).on("productPopup", function(){ moreviewSwiper() }) //分享 $(".share-group").on("click", ".share-toggle", function(){ $(".share-group").toggleClass("in-open") }) })($) // ========================================================== // 購物車摺疊區塊 // ========================================================== ;(function($) { //$(".shopcart-group").addClass("in-collapse") $(document).on('click', '.group-header', function(){ let group = $(this).parents('.shopcart-group') if(group.hasClass('in-collapse')){ group.removeClass('in-collapse') }else{ group.addClass('in-collapse') } }) })($) // ========================================================== // 購物類radio區塊 // ========================================================== ;(function($) { function updateRadioWrapper(){ if($(".shopcart-radio-wrapper").length > 0){ $(".shopcart-radio-wrapper").each(function(){ $(this).find(".radio-input:checked").parents(".radio-group").addClass("in-checked").siblings().removeClass("in-checked") }) } } updateRadioWrapper() $(window).on("pageshow", function(){ updateRadioWrapper() }) $(".invoice-radio-wrapper").each(function(){ updateInvoiceFunc($(this)) }) $(window).on("resize", function(){ $(".invoice-radio-wrapper").each(function(){ updateInvoiceFunc($(this)) }) }) $(window).on("updateInvoice", function(){ updateRadioWrapper() $(".invoice-radio-wrapper").each(function(){ updateInvoiceFunc($(this)) }) }) //更改發票類型 $(document).on("change", ".shopcart-radio-wrapper .radio-input", function(){ let _this = $(this) let wrapper = _this.parents(".shopcart-radio-wrapper") wrapper.find(".radio-input:checked").parents(".radio-group").addClass("in-checked").siblings().removeClass("in-checked") //發票 if(wrapper.hasClass("invoice-radio-wrapper")){ updateInvoiceFunc(wrapper) } }) function updateInvoiceFunc(wrapper){ let invoType = wrapper.find(".radio-input:checked").val() wrapper.find(".invoice-group").addClass("hide") wrapper.find(".invoice-group[data-target=" + wrapper.find(".radio-input:checked").val() + "]").removeClass("hide") //手機切換時將細項轉移位置 if(wrapper.find(".radio-input:checked").length){ if($(window)[0].innerWidth < 1200){ let invoContainer = wrapper.find(".invoice-container").detach() wrapper.find(".radio-input:checked").parents(".radio-group").after(invoContainer) }else{ let invoContainer = wrapper.find(".invoice-container").detach() wrapper.find(".radio-box").after(invoContainer) } } if(invoType){ //必填欄位更新 let invoGroup = wrapper.find(".invoice-group[data-target=" + invoType + "]") wrapper.find("forms_show").text("") wrapper.find("[fun]").each(function(){ $(this).attr("fun", "") }) invoGroup.find("input, select").each(function(){ let col = $(this) if(!col.parents(".invoice-checked-group").length){ if(col.attr("type") == "radio" || col.attr("type") == "checkbox"){ col.attr("fun", "checkItems") }else{ col.attr("fun", "checkNull") } } }) updateOnlineInvoice(invoType) } } //更改雲端發票種類 $(document).on("change", ".invoice-radio", function(){ let wrapper = $(".invoice-radio-wrapper") let invoType = wrapper.find(".radio-input:checked").val() updateOnlineInvoice(invoType) }) function updateOnlineInvoice(id){ $(".invoice-group[data-target="+id+"] .invoice-checked-group").find("[fun]").each(function(){ $(this).attr("fun", "") }) $(".invoice-group[data-target="+id+"]").find(".forms_show").text("") $(".invoice-group[data-target="+id+"] .invoice-radio:checked").parents(".invoice-item").find(".invoice-checked-group input").each(function(){ $(this).attr("fun", "checkNull") }) } })($) //分類頁切換 ;(function($) { $(".page-nav").on("click", ".nav-item", function(){ let _this = $(this) let target =_this.data("for") $(".page-nav .nav-item").removeClass("in-active") $(".page-group").removeClass("in-active") _this.addClass("in-active") $(".page-group[data-id='" + target + "']").addClass("in-active") }) })($) // trigger function ;(function($) { $(window).triggerAll('resize scroll') })($) $(document).ready(function(){ $(".coupon-data").on('click','.coupon-btn',function(){ var coupon_id = $(this).attr("coupon_id"); if(coupon_id){ $.ajax({ url:Project_Country+'ajax/ajax_get_coupon.php', type:"POST", cache:false, async:true, data:{coupon_id:coupon_id}, error:function(d){ alert('網路連線過慢,網頁請重新整理'); }, success:function(d){ switch(d){ case "COUPON_OK": alert('領取優惠券成功'); window.location.reload(); break; case "NO_COUPON": alert('已無可領取優惠券'); window.location.reload(); break; case "COUPON_GOT": alert('已取得優惠券'); window.location.reload(); break; case "COUPON_ERROR": alert('領取錯誤,請重整'); window.location.reload(); break; case "LOGIN_ERROR": alert('請先登入會員後再領取'); window.location.href = '/member-login/'; break; default: alert(_jsLang.資料庫忙線中); break; }; } }); } }); });