;
(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);