var web_root="/";(function ($) { /** 統一高度用的PLUGIN */ $.fn.extend({ imgLoaded: function( callback ) { var i, c = true, t = this, l = t.length; for ( i = 0; i < l; i++ ) { if (this.tagName === "IMG") { c = (c && this.complete && this.height !== 0); } } if (c) { if (typeof callback === "function") { callback(); } } else { setTimeout(function(){ $(t).imgLoaded( callback ); }, 200); } }, sameHeight: function(opt){ var options = $.extend({ item : '.item', overWidth: 0 }, opt ); return this.each(function(){ var $this = $(this), $win = $(window), $item = $this.find(options.item), _init = $this.data('init'), _tempW = 0, overWidth = options.overWidth, setWidth = function(){ var _maxH = 0, _ww = $win.width(); if( _tempW != _ww ) { _tempW = _ww; $item.css({ height:''}); if(_ww > overWidth ){ if($item.find('img').length){ $item.find('img').imgLoaded(function(){ $item.each(function(){ var _h = $(this).outerHeight(); if( _h > _maxH ) _maxH = _h; }).css({height: _maxH + 'px'}); }) }else { $item.each(function(){ var _h = $(this).outerHeight(); if( _h > _maxH ) _maxH = _h; }).css({height: _maxH + 'px'}); } } } }, bindEvent = function(){ $win.on('resize.setH', setWidth).on('load', function(){ $win.trigger('resize.setH'); }) }; if(!_init) { $this.data('init', true); bindEvent(); } }) } }); $.fn.addNavStyle = function () { return this.each(function () { var $win = $(window), $mainNav = $(this), $nav = $mainNav.find('li:has(ul)'); $nav.each(function (n) { var preName = 'AC-Nav' + n, $this = $(this); if($this.is('.on')) $this.data('open', true); $this.find('>.sub-nav').attr('id', preName); $this.addClass('has-nav').data('link', '#' + preName); $this.attr('data-link', preName); }) }) } $(function () { var _root = typeof(web_root) == 'undefined' ? '' : web_root; var $win = $(window), $body = $('body'), $container = $('#container'), $header = $('#header'), $banner = $('.banner'), $navBtn = $('#nav-btn, #nav-btn2'), $mainNavWrap = $('#main-nav'), $mobileNavWrap = $mainNavWrap.find('.mobile-nav'), $subNav = $mainNavWrap.find('.sub-nav'), $mobileSide = $header.find('.mobile-side'), $serachBtn = $('#search-btn'), $searchWrap = $('#search-wrap'), $dynNode = $('.dyn-node'), $dynNodeWrap = $('.dyn-node-wrap'), $footer = $('#footer'), $maskBg = $('#mask-bg'), $goTop = $('#go-top'), $btnBack = $(''), $infoNav = $('.info-nav'), $cate = $('.cate-wrap .cate'), $datePicker = $('.datepicker'), tempW = 0, brokenWidth = 992, setNavNode = function (p0) { if (p0 >= 992) { $mainNavWrap.find('.has-nav').each(function () { var $this = $(this), $obj = $($this.data('link')); $obj.appendTo($this); }) } else { $subNav.appendTo($mobileNavWrap); } }, setmainNavWrapHeight = function() { if($win.width() >= 992){ //$subNav.find('ul').css({'max-height': ''}); //$mainNavWrap.find('.nav-wrap').css({'max-height': ''}); $mainNavWrap.find('ul').css({'max-height': ''}); }else{ //$subNav.find('ul').css({'max-height': ($win.height() - $subNav.find('ul').offset().top) + 'px'}); //$mainNavWrap.find('.nav-wrap').css({'max-height': ($win.height() - $mainNavWrap.find('.nav-wrap').offset().top) + 'px'}); $mainNavWrap.find('ul').css({'max-height': ($win.height() - $mainNavWrap.find('.nav-wrap').offset().top) + 'px'}); } }, moveNode = function() { $dynNode.each(function(){ var $this = $(this), nodeName = this.getAttribute('data-node-name'), resize_width = this.getAttribute('data-resize') != null ? this.getAttribute('data-resize') : brokenWidth, _parentAttr = tempW >= resize_width ? 'data-pc-child': 'data-mb-child', _init = $this.parent()[0].getAttribute(_parentAttr) == nodeName; console.log(tempW); if(!_init) { $dynNodeWrap.filter(function(){ return this.getAttribute(_parentAttr) == nodeName; }).append($this); } }); }, openNav = function () { closeSearch(); $body.addClass('lock'); //$navBtn.addClass('on'); $mobileSide.addClass('on'); $maskBg.addClass('on'); }, closeNav = function () { $mobileSide.removeClass('on').find('.on,.switch').removeClass('on switch'); $mainNavWrap.removeClass('lv1 lv2').find('.has-nav').filter(function(){return $(this).data('open')== true; }).addClass('on'); $navBtn.removeClass('on'); $maskBg.removeClass('on'); $body.removeClass('lock'); }, switchNav = function(p0){ $mainNavWrap.removeClass('lv1 lv2').find('.on,.switch').removeClass('on switch'); $(p0).addClass('switch').siblings().removeClass('on switch'); }, checkNavBtn = function (p0) { var _NavOn = $navBtn.hasClass('on'); if (p0 >= 992 && _NavOn) closeNav(); } openSearch = function () { closeNav(); $body.addClass('lock'); $serachBtn.addClass('on'); $searchWrap.addClass('on'); $maskBg.addClass('on'); }, closeSearch = function () { $serachBtn.removeClass('on'); $searchWrap.removeClass('on'); $maskBg.removeClass(); $body.removeClass('lock'); }, checkSearchBtn = function (p0) { var _NavOn = $serachBtn.hasClass('on'); if (p0 >= 992 && _NavOn) closeSearch(); } checkGoTop = function (p0) { if (p0 < $footer.offset().top) { $goTop.removeClass('end'); } else { $goTop.addClass('end'); } }; //加入主要導覽列樣式 $mainNavWrap.addNavStyle(); //加入行動版主要導覽列子選單返回鈕 $btnBack.on('click', function(e){ e.preventDefault(); var $this = $(this), lv = $this.parent().is('.lv2') ? 'lv2' : 'lv1'; $mainNavWrap.removeClass(lv); }).prependTo($subNav); //主要導覽列開合 if($mainNavWrap.length){ $mainNavWrap.find('.has-nav > a').on('click', function (e) { var _w = $win.width(), $this = $(this), $li = $this.parent(), id = $li.data('link'), $obj = $(id), lv = $obj.is('.lv2') ? 'lv2' : 'lv1'; if (_w < 992 && id) { e.preventDefault(); $mobileNavWrap.addClass('on'); $mainNavWrap.addClass(lv); $('.'+lv).removeClass('on'); $obj.addClass('on'); } }); } //頁尾導覽列開合 $footer.find('.footer-title').on('click', function (e) { var _w = $win.width(); if (_w < 992) { e.preventDefault(); $(this).parent().toggleClass('on'); } }); //畫面大小變更時樣式重新設定 $win.on('resize', function () { var _w = $win.width(); if(tempW != _w && $mainNavWrap.length) { setmainNavWrapHeight(); setNavNode(_w); checkNavBtn(_w); checkSearchBtn(_w); } if(tempW != _w) { tempW = _w; moveNode(); } }).trigger('resize'); //行動版選單鈕(主導覽開合) if($navBtn.length){ $navBtn.on('click', function (e) { e.preventDefault(); var $this = $(this), elemId = $this.attr('href') === '#second-nav' ? $this.attr('href') : '#primary-nav', isOpen = !$navBtn.filter('.on').length && $this.not('.on'), isSwitch = $navBtn.filter('.on').length && !$(elemId).is('.on, .switch'), isClose = $this.is('.on') && $(elemId).is('.on, .switch'); if(isOpen){ $this.addClass('on'); $(elemId).addClass('on'); openNav(); setmainNavWrapHeight(); }else if(isSwitch){ $navBtn.removeClass('on'); $this.addClass('on'); switchNav(elemId); }else if(isClose) { closeNav(); } }); } //行動版搜尋鈕(搜尋區開合) if($serachBtn.length){ $serachBtn.on('click', function(e){ e.preventDefault(); var isOpen = $(this).hasClass('on'); isOpen ? closeSearch() : openSearch(); }); } //行動版遮罩點選時關閉已開啟之主要導覽列及搜尋區塊 $maskBg.on('click',function(){ closeNav(); closeSearch(); }); //回頂端事件 $goTop.on('click', function (e) { e.preventDefault(); $('html, body').stop().animate({ scrollTop: 0 }, 300); }); $win.on('scroll', function () { var _scroll = $win.scrollTop(), _winH = $win.height(), _top = $header.outerHeight(); $goTop[_scroll > _top ? 'addClass' : 'removeClass']('block'); checkGoTop(_winH + _scroll); }).trigger('scroll'); $win.on('load', function(){ $(this).trigger('resize').trigger('scroll'); }).trigger('resize'); //單元選單手機下拉樣式開合 if($infoNav.length){ $infoNav.find('.label').on('click', function(e){ e.preventDefault(); var $this = $(this); $this.parent().toggleClass('on'); }) $infoNav.find('li:has(.sub-nav) > a').on('click', function (e) { e.preventDefault(); const $link = $(this); const $li = $link.parent(); const isExpanded = $li.hasClass('on'); // 切換 .on 類別 $li.toggleClass('on').siblings().removeClass('on'); // aria-expanded 切換 $infoNav.find('li:has(.sub-nav) > a').attr('aria-expanded', 'false'); $link.attr('aria-expanded', String(!isExpanded)); }); const $current = $infoNav.find('li.on > a'); if ($current.length && $current[0].focus) { try { $current[0].focus({ preventScroll: true }); } catch (e) { const scrollTop = $(window).scrollTop(); $current.focus(); $(window).scrollTop(scrollTop); } } } //類別選單下拉樣式開合 if($cate.length){ $cate.find('.label-title').on('click', function(e){ e.preventDefault(); var $this = $(this); $this.parent().toggleClass('on').siblings().removeClass('on'); }); $win.on('click', function(e){ if(!$(e.target).closest('.cate').length) $cate.removeClass('on'); }) } //日期套件 if($datePicker.length){ $.getScript(_root + 'inc/js/jquery-ui-1.11.0/jquery-ui.min.js', function(){ $datePicker.datepicker({ dateFormat: 'yy-mm-dd' }); }) } }); })(jQuery);