; (function ($) { $.fn.cubeMenu = function (options) { var $win = $(window); var win_w = $win.width(); var defaults = { className: 'cubeMenu', viewMoreEnabled: true, viewMoreLabel: 'more', viewMoreMaxWidth: 992, mobile:1200 }; if (this.length == 0) { } else if (this.length > 1) { this.each(function () { $(this).cubeMenu(options); }); return this; } var cubeMenu = this; cubeMenu.plugin = this; cubeMenu.config = {}; cubeMenu.resizeEvent = null; cubeMenu.window = $(window); // 初始化 var init = function () { cubeMenu.config = $.extend({}, defaults, options); setup(); cubeMenu.checkMenu(); // 页面视窗变化 cubeMenu.window.resize(function () { cubeMenu.plugin.css('overflow', 'hidden'); clearTimeout(cubeMenu.resizeEvent); cubeMenu.resizeEvent = setTimeout(function () { cubeMenu.checkMenu(); }, 100); cubeMenu.openViewMore(); $(document).click(function () { cubeMenu.disableViewMoreDropDown(); }); }); }; // setup var setup = function () { var wrapClass = cubeMenu.config.className; var defaultClass = cubeMenu.plugin.attr('class'); cubeMenu.plugin.removeClass().addClass('tab-menus'); cubeMenu.plugin.wrap('
'); cubeMenu.plugin = cubeMenu.plugin.parent(); if (cubeMenu.config.viewMoreEnabled) { cubeMenu.plugin.append('' + cubeMenu.config.viewMoreLabel + ' '); } }; // 选择呢 cubeMenu.checkMenu = function () { var pluginMaxWidth = cubeMenu.plugin.width(); if (cubeMenu.config.viewMoreEnabled) { var viewMoreLinkWidth = cubeMenu.plugin.find('.tab-viewMore').outerWidth(true); } // 获取tab-menus 的宽度 function getContentWidth() { var menuContentWidth = 0; cubeMenu.plugin.find('.tab-menus>li').each(function () { menuContentWidth += $(this).outerWidth(true); }) return menuContentWidth; } function switchMenu(type) { if (type == 'viewMore') { var viewMoreMenuWidth = viewMoreLinkWidth; cubeMenu.plugin.removeClass('mobile').show(); cubeMenu.plugin.find('.tab-viewMore>ul>li').remove(); cubeMenu.plugin.find('.tab-menus > li').show().each(function () { $(this).attr('data-index',$(this).index()) if (viewMoreMenuWidth + $(this).outerWidth(true) < pluginMaxWidth) { viewMoreMenuWidth += $(this).outerWidth(true); } else { cubeMenu.plugin.find('.tab-viewMore > ul').append($(this).clone().show()); $(this).hide(); } }); cubeMenu.plugin.find('.tab-viewMore').show(); // click open viewMore cubeMenu.openViewMore(); } else if (type == 'mobile') { cubeMenu.plugin.find('.tab-menus > li').show().each(function () { $(this).attr('data-index',$(this).index()) }); var conW = getContentWidth(); cubeMenu.plugin.addClass('mobile'); $('.type-nav').addClass('mobile'); cubeMenu.plugin.find('.tab-menus').css('width', (conW + 20) + 'px'); cubeMenu.plugin.find('.tab-menus > li').show(); cubeMenu.plugin.find('.tab-viewMore, .tab-viewMore > ul').hide(); cubeMenu.plugin.find('.tabviewMore > ul > li').remove(); } else { cubeMenu.plugin.find('.tab-menus > li').show().each(function () { $(this).attr('data-index',$(this).index()) }); cubeMenu.plugin.find('.tab-viewMore').hide(); } } // 判断显示下拉更多 // console.log(getContentWidth() , pluginMaxWidth); if (win_w > cubeMenu.config.mobile) { if (getContentWidth() > pluginMaxWidth) { switchMenu('viewMore'); } else { switchMenu('normal'); } } else { switchMenu('mobile'); } cubeMenu.plugin.css('overflow', ''); }; // 点击显示下拉 cubeMenu.openViewMore = function () { cubeMenu.plugin.find('.tab-viewMore > a').click(function (e) { e.stopPropagation(); cubeMenu.enableViewMoreDropDown(); }); } // 点击外部任意位置触发 $(document).click(function (e) { cubeMenu.disableViewMoreDropDown(); }); // 打开下拉 cubeMenu.enableViewMoreDropDown = function () { if (cubeMenu.plugin.find('.tab-viewMore > a').hasClass('active')) { cubeMenu.disableViewMoreDropDown(); return false; } else if (cubeMenu.plugin.find('.tab-menus > li').hasClass('active')) { cubeMenu.plugin.find('.tab-viewMore ul > li').removeClass('active'); } cubeMenu.plugin.find('.tab-viewMore > a').addClass('active'); cubeMenu.plugin.find('.tab-viewMore > ul').show(); }; // 点击关闭其他的有关下拉 cubeMenu.disableViewMoreDropDown = function () { if (cubeMenu.plugin.find('.tab-viewMore ul > li').hasClass('active')) {} cubeMenu.plugin.find('.tab-viewMore > a').removeClass('active'); cubeMenu.plugin.find('.tab-viewMore > ul').hide(); }; init(); return this; }; })(window.jQuery);