官网:http://jasonweaver.name/lab/flexiblenavigation/
参考资料:
HTML5 respond.js 解决IE6~8的响应式布局问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>flexnav</title>
<link rel="stylesheet" href="css/flexnav.css">
<link rel="stylesheet" href="css/page.css">
<link rel="stylesheet" href="css/font-awesome.css">
<script src="js/jquery.min.js"></script>
<script src="js/jquery.hoverIntent.js"></script>
<script src="js/jquery.flexnav.js"></script>
<script type="text/javascript">
$(function () {
$(".flexnav").flexNav({
\'calcItemWidths\': true,
\'hoverIntent\': true
});
});
</script>
<!--[if lt IE 9]>
<script src="js/respond.min.js"></script>
<![endif]-->
</head>
<body>
<header>
<nav>
<div class="menu-button">
导航菜单
<span class="touch-button"><i class="navicon icon-reorder"></i></span>
</div>
<ul data-breakpoint="800" class="flexnav">
<li><a href=\'#\'>主页</a></li>
<li><a href=\'#\'>我们的愿景</a></li>
<li><a href=\'#\'>雄狮系统</a></li>
<li>
<a href=\'#\'>雄狮学院</a>
<ul>
<li><a href=\'#\'>学院信息</a></li>
<li><a href=\'#\'>学院住宿</a></li>
<li><a href=\'#\'>学院教练</a></li>
<li><a href=\'#\'>优秀球员</a></li>
<li><a href=\'#\'>足球及教育体系</a></li>
</ul>
</li>
<li><a href=\'#\'>我们的团队</a></li>
<li>
<a href=\'#\'>课程</a>
<ul>
<li><a href=\'#\'>英国夏令营</a></li>
<li><a href=\'#\'>中国夏令营</a></li>
<li>
<a href=\'#\'>短期课程</a>
<ul>
<li><a href=\'#\'>短期课程( 6星期)</a></li>
<li><a href=\'#\'>短期课程(8星期)</a></li>
<li><a href=\'#\'>短期课程(12星期)</a></li>
</ul>
</li>
<li>
<a href=\'#\'>长期课程</a>
<ul>
<li><a href=\'#\'>长期课程(一年)</a></li>
<li><a href=\'#\'>长期课程(两年)</a></li>
<li><a href=\'#\'>教练员培训</a></li>
</ul>
</li>
</ul>
</li>
<li><a href=\'#\'>商业机遇</a></li>
<li><a href=\'#\'>新闻</a></li>
<li><a href=\'#\'>联系方式</a></li>
</ul>
</nav>
</header>
</body>
</html>
.flexnav .touch-button {
position: absolute;
z-index: 999;
top: 0;
right: 0;
width: 50px;
height: 50px;
display: inline-block;
background: #acaca1;
background: rgba(0, 0, 0, 0.075);
text-align: center;
-webkit-border-radius: 50%;
-moz-border-radius:50%;
border-radius: 50%;
}
@media all and (min-width: 800px) {
.flexnav .touch-button {
border-radius:0;
}
}
/*
FlexNav.js 1.3.3
Created by Jason Weaver http://jasonweaver.name
Released under http://unlicense.org/
//
*/
(function () {
var $;
$ = jQuery;
$.fn.flexNav = function (options) {
var $nav, $top_nav_items, breakpoint, count, nav_percent, nav_width, resetMenu, resizer, settings, showMenu, toggle_selector, touch_selector, navicon_icon;
settings = $.extend({
\'animationSpeed\': 250, // 默认的下拉动画速度
\'transitionOpacity\': true, // 默认为不透明动画
\'buttonSelector\': \'.menu-button\', //默认的菜单按钮CSS类名
\'hoverIntent\': false, //默认的菜单按钮CSS类名
\'hoverIntentTimeout\': 150, // hoverIntent默认结束时间
\'calcItemWidths\': false, // 是否动态配置顶级导航项宽度
\'hover\': true // 是否支持鼠标悬浮功能
}, options);
$nav = $(this);
$nav.addClass(\'with-js\');
if (settings.transitionOpacity === true) {
$nav.addClass(\'opacity\');
}
$nav.find("li").each(function () {
if ($(this).has("ul").length) {
return $(this).addClass("item-with-ul").find("ul").hide();
}
});
if (settings.calcItemWidths === true) {
$top_nav_items = $nav.find(\'>li\');
count = $top_nav_items.length;
nav_width = 100 / count;
nav_percent = nav_width + "%";
}
if ($nav.data(\'breakpoint\')) {
breakpoint = $nav.data(\'breakpoint\');
}
showMenu = function () {
if ($nav.hasClass(\'lg-screen\') === true && settings.hover === true) {
if (settings.transitionOpacity === true) {
return $(this).find(\'>ul\').addClass(\'flexnav-show\').stop(true, true).animate({
height: ["toggle", "swing"],
opacity: "toggle"
}, settings.animationSpeed);
} else {
return $(this).find(\'>ul\').addClass(\'flexnav-show\').stop(true, true).animate({
height: ["toggle", "swing"]
}, settings.animationSpeed);
}
}
};
resetMenu = function () {
if ($nav.hasClass(\'lg-screen\') === true && $(this).find(\'>ul\').hasClass(\'flexnav-show\') === true && settings.hover === true) {
if (settings.transitionOpacity === true) {
return $(this).find(\'>ul\').removeClass(\'flexnav-show\').stop(true, true).animate({
height: ["toggle", "swing"],
opacity: "toggle"
}, settings.animationSpeed);
} else {
return $(this).find(\'>ul\').removeClass(\'flexnav-show\').stop(true, true).animate({
height: ["toggle", "swing"]
}, settings.animationSpeed);
}
}
};
resizer = function () {
var selector;
// console.log(breakpoint);
// console.log($(window).width());
if ($(window).width() <= breakpoint) {
$nav.removeClass("lg-screen").addClass("sm-screen");
if (settings.calcItemWidths === true) {
$top_nav_items.css(\'width\', \'100%\');
}
selector = settings[\'buttonSelector\'] + \', \' + settings[\'buttonSelector\'] + \' .touch-button\';
$(selector).removeClass(\'active\');
//重置下级菜单点击图标
$(\'.item-with-ul ul .navicon\').removeClass("icon-chevron-right").addClass("icon-chevron-down");
return $(\'.one-page li a\').on(\'click\', function () {
return $nav.removeClass(\'flexnav-show\');
});
} else if ($(window).width() > breakpoint) {
$nav.removeClass("sm-screen").addClass("lg-screen");
if (settings.calcItemWidths === true) {
$top_nav_items.css(\'width\', nav_percent);
}
$nav.removeClass(\'flexnav-show\').find(\'.item-with-ul\').on();
$(\'.item-with-ul\').find(\'ul\').removeClass(\'flexnav-show\')
.find(".navicon").removeClass("icon-chevron-down").addClass("icon-chevron-right"); //重置下级菜单点击图标
resetMenu();
if (settings.hoverIntent === true) {
return $(\'.item-with-ul\').hoverIntent({
over: showMenu,
out: resetMenu,
timeout: settings.hoverIntentTimeout
});
} else if (settings.hoverIntent === false) {
return $(\'.item-with-ul\').on(\'mouseenter\', showMenu).on(\'mouseleave\', resetMenu);
}
}
};
$(settings[\'buttonSelector\']).data(\'navEl\', $nav);
touch_selector = \'.item-with-ul\';
$(touch_selector).append(\'<span class="touch-button"><i class="navicon icon-chevron-down"></i></span>\');
toggle_selector = settings[\'buttonSelector\'] + \', \' + settings[\'buttonSelector\'] + \' .touch-button\';
$(toggle_selector).on(\'click\', function (e) {
var $btnParent, $thisNav, bs;
$(toggle_selector).toggleClass(\'active\');
e.preventDefault();
e.stopPropagation();
bs = settings[\'buttonSelector\'];
$btnParent = $(this).is(bs) ? $(this) : $(this).parent(bs);
//菜单切换,切换图标
if ($btnParent.find(".navicon").hasClass("icon-reorder")) {
$btnParent.find(".navicon").removeClass("icon-reorder").addClass(" icon-remove");
}
else {
$btnParent.find(".navicon").removeClass("icon-remove").addClass(" icon-reorder");
}
$thisNav = $btnParent.data(\'navEl\');
return $thisNav.toggleClass(\'flexnav-show\');
});
$(\'.touch-button\').on(\'click\', function (e) {
var $sub, $touchButton;
$sub = $(this).parent(\'.item-with-ul\').find(\'>ul\');
$touchButton = $(this).parent(\'.item-with-ul\').find(\'>span.touch-button\');
if ($nav.hasClass(\'lg-screen\') === true) {
$(this).parent(\'.item-with-ul\').siblings().find(\'ul.flexnav-show\').removeClass(\'flexnav-show\').hide();
}
if ($sub.hasClass(\'flexnav-show\') === true) {
$sub.removeClass(\'flexnav-show\').slideUp(settings.animationSpeed);
return $touchButton.removeClass(\'active\');
} else if ($sub.hasClass(\'flexnav-show\') === false) {
$sub.addClass(\'flexnav-show\').slideDown(settings.animationSpeed);
return $touchButton.addClass(\'active\');
}
});
$nav.find(\'.item-with-ul *\').focus(function () {
$(this).parent(\'.item-with-ul\').parent().find(".open").not(this).removeClass("open").hide();
return $(this).parent(\'.item-with-ul\').find(\'>ul\').addClass("open").show();
});
resizer();
return $(window).on(\'resize\', resizer);
};
}).call(this);