值得分享的Bootstrap Ace模板实现菜单和Tab页效果_javascript技巧

本文分享了项目中使用Ace模板的菜单样式和基于iframe的Tab页效果。

一、效果展示

折腾了好久,终于将菜单样式和Tab页的效果从项目中抽出来了。

1、初始加载出来的效果

2、展开菜单(支持多级展开,后面代码介绍)

3、点击子菜单,以Tab页的形式打开对应的页面

4、支持菜单折叠

5、打开的菜单过多时自动换行显示,折叠后自适应

二、代码示例
有现成的东西用很方便的,总的来说Bootstrap Ace模板的功能还是比较强大的,并且支持各种终端设备。本文主要使用的它的菜单的效果,下面就来看看Ace模板菜单效果的实现代码。

1、菜单效果
由于Ace是基于Bootstrap的,所以首先需要引用jquery和bootstrap组件,先来总的看看它需要引用哪些文件吧。  

<script src="/Scripts/jquery-1.9.1.min.js"></script>

 <script src="/Content/bootstrap/js/bootstrap.min.js"></script>
 <link href="/Content/bootstrap/css/bootstrap.min.css" rel="stylesheet" />

 <link href="/Content/font-awesome/css/font-awesome.min.css" rel="stylesheet" />
 <link href="/Content/ace/css/ace-rtl.min.css" rel="stylesheet" />
 <link href="/Content/ace/css/ace-skins.min.css" rel="stylesheet" />
 <link href="/Content/sidebar-menu/sidebar-menu.css" rel="stylesheet"/>

 <script src="/Content/ace/js/ace-extra.min.js"></script>
 <script src="/Content/ace/js/ace.min.js"></script>

  <script src="/Content/sidebar-menu/sidebar-menu.js"></script>

呵呵,看着还是挺多的吧。除了最后一个js文件(<script src="/Content/sidebar-menu/sidebar-menu.js"></script>)是博主自己封装的,其他基本都是些组件需要的特性组件。看看页面上面要放哪些html标签:   

 <div class="sidebar" id="sidebar">
    <ul class="nav nav-list" id="menu"></ul>
    <div class="sidebar-collapse" id="sidebar-collapse">
     <i class="icon-double-angle-left" data-icon1="icon-double-angle-left" data-icon2="icon-double-angle-right"></i>
    </div>
   </div>

再来看看sidebar-menu.js这个文件里面封装的方法:

(function ($) {
 $.fn.sidebarMenu = function (options) {
  options = $.extend({}, $.fn.sidebarMenu.defaults, options || {});
  var target = $(this);
  target.addClass('nav');
  target.addClass('nav-list');
  if (options.data) {
   init(target, options.data);
  }
  else {
   if (!options.url) return;
   $.getJSON(options.url, options.param, function (data) {
    init(target, data);
   });
  }
  var url = window.location.pathname;
  //menu = target.find("[href='" + url + "']");
  //menu.parent().addClass('active');
  //menu.parent().parentsUntil('.nav-list', 'li').addClass('active').addClass('open');
  function init(target, data) {
   $.each(data, function (i, item) {
    var li = $('<li></li>');
    var a = $('<a></a>');
    var icon = $('<i></i>');
    //icon.addClass('glyphicon');
    icon.addClass(item.icon);
    var text = $('<span></span>');
    text.addClass('menu-text').text(item.text);
    a.append(icon);
    a.append(text);
    if (item.menus&&item.menus.length>0) {
     a.attr('href', '#');
     a.addClass('dropdown-toggle');
     var arrow = $('<b></b>');
     arrow.addClass('arrow').addClass('icon-angle-down');
     a.append(arrow);
     li.append(a);
     var menus = $('<ul></ul>');
     menus.addClass('submenu');
     init(menus, item.menus);
     li.append(menus);
    }
    else {
     var href = 'javascript:addTabs({id:\'' + item.id + '\',title: \'' + item.text + '\',close: true,url: \'' + item.url + '\'});';
     a.attr('href', href);
     //if (item.istab)
     // a.attr('href', href);
     //else {
     // a.attr('href', item.url);
     // a.attr('title', item.text);
     // a.attr('target', '_blank')
     //}
     li.append(a);
    }
    target.append(li);
   });
  }
 }

 $.fn.sidebarMenu.defaults = {
  url: null,
  param: null,
  data: null
 };
})(jQuery);

在页面上面直接调用sidebar-menu的方法

$(function () {
   $('#menu').sidebarMenu({
    data: [{
     id: '1',
     text: '系统设置',
     icon: 'icon-cog',
     url: '',
     menus: [{
      id: '11',
      text: '编码管理',
      icon: 'icon-glass',
      url: '/CodeType/Index'
     }]
    }, {
     id: '2',
     text: '基础数据',
     icon: 'icon-leaf',
     url: '',
     menus: [{
      id: '21',
      text: '基础特征',
      icon: 'icon-glass',
      url: '/BasicData/BasicFeature/Index'
     }, {
      id: '22',
      text: '特征管理',
      icon: 'icon-glass',
      url: '/BasicData/Features/Index'
     }, {
      id: '23',
      text: '物料维护',
      icon: 'icon-glass',
      url: '/Model/Index'
     }, {
      id: '24',
      text: '站点管理',
      icon: 'icon-glass',
      url: '/Station/Index'
     }]
    }, {
     id: '3',
     text: '权限管理',
     icon: 'icon-user',
     url: '',
     menus: [{
      id: '31',
      text: '用户管理',
      icon: 'icon-user',
      url: '/SystemSetting/User'
     }, {
      id: '32',
      text: '角色管理',
      icon: 'icon-apple',
      url: '/SystemSetting/Role'
     }, {
      id: '33',
      text: '菜单管理',
      icon: 'icon-list',
      url: '/SystemSetting/Menu'
     }, {
      id: '34',
      text: '部门管理',
      icon: 'icon-glass',
      url: '/SystemSetting/Department'
     }]
    }, {
     id: '4',
     text: '订单管理',
     icon: 'icon-envelope',
     url: '',
     menus: [{
      id: '41',
      text: '订单查询',
      icon: 'icon-glass',
      url: '/Order/Query'
     }, {
      id: '42',
      text: '订单排产',
      icon: 'icon-glass',
      url: '/Order/PLANTPRODUCT'
     }, {
      id: '43',
      text: '订单撤排',
      icon: 'icon-glass',
      url: '/Order/cancelPRODUCT'
     }, {
      id: '44',
      text: '订单HOLD',
      icon: 'icon-glass',
      url: '/Order/hold'
     }, {
      id: '45',
      text: '订单删除',
      icon: 'icon-glass',
      url: '/Order/delete'
     }, {
      id: '47',
      text: '订单插单',
      icon: 'icon-glass',
      url: '/Order/insertorder'
     }, {
      id: '48',
      text: '订单导入',
      icon: 'icon-glass',
      url: '/Order/Import'
     }]
    }]
   });
  });

这里需要说明的很重要的一点就是关于菜单前面的小图标:

con的值为icon-user的时候,菜单上面就会显示一个如图的小图标。当然一般情况下,菜单肯定是动态加载的的,如果需要从后台取数据,可以直接调用此方法:

$('#menu').sidebarMenu({ url: "/api/UserApi/GetMenuByUser/", param: { strUser: 'admin' } });
即可,呵呵,很简单吧。

2、Tab页效果
Tab页的效果其实是和左边菜单息息相关的,首先还是看看Tab页效果的js引用。
 <script src="/Scripts/bootstrap-tab.js"></script>
页面的html标签:
           

 <div class="main-content"><div class="page-content">
     <div class="row">
      <div class="col-xs-12" style="padding-left:5px;">
       <ul class="nav nav-tabs" role="tablist">
        <li class="active"><a href="#Index" role="tab" data-toggle="tab">首页</a></li>
       </ul>
       <div class="tab-content">
        <div role="tabpanel" class="tab-pane active" id="Index">
        </div>
       </div>
      </div>
     </div>
    </div>
   </div>

bootstrap-tab.js这个文件里面封装了addTabs方法

var addTabs = function (options) {
 //var rand = Math.random().toString();
 //var id = rand.substring(rand.indexOf('.') + 1);
 var url = window.location.protocol + '//' + window.location.host;
 options.url = url + options.url;
 id = "tab_" + options.id;
 $(".active").removeClass("active");
 //如果TAB不存在,创建一个新的TAB
 if (!$("#" + id)[0]) {
  //固定TAB中IFRAME高度
  mainHeight = $(document.body).height() - 90;
  //创建新TAB的title
  title = '<li role="presentation" id="tab_' + id + '"><a href="#' + id + '" aria-controls="' + id + '" role="tab" data-toggle="tab">' + options.title;
  //是否允许关闭
  if (options.close) {
   title += ' <i class="glyphicon glyphicon-remove" tabclose="' + id + '"></i>';
  }
  title += '</a></li>';
  //是否指定TAB内容
  if (options.content) {
   content = '<div role="tabpanel" class="tab-pane" id="' + id + '">' + options.content + '</div>';
  } else {//没有内容,使用IFRAME打开链接
   content = '<div role="tabpanel" class="tab-pane" id="' + id + '"><iframe src="' + options.url + '" width="100%" height="' + mainHeight +
     '" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="yes" allowtransparency="yes"></iframe></div>';
  }
  //加入TABS
  $(".nav-tabs").append(title);
  $(".tab-content").append(content);
 }
 //激活TAB
 $("#tab_" + id).addClass('active');
 $("#" + id).addClass("active");
};
var closeTab = function (id) {
 //如果关闭的是当前激活的TAB,激活他的前一个TAB
 if ($("li.active").attr('id') == "tab_" + id) {
  $("#tab_" + id).prev().addClass('active');
  $("#" + id).prev().addClass('active');
 }
 //关闭TAB
 $("#tab_" + id).remove();
 $("#" + id).remove();
};
$(function () {
 mainHeight = $(document.body).height() - 45;
 $('.main-left,.main-right').height(mainHeight);
 $("[addtabs]").click(function () {
  addTabs({ id: $(this).attr("id"), title: $(this).attr('title'), close: true });
 });

 $(".nav-tabs").on("click", "[tabclose]", function (e) {
  id = $(this).attr("tabclose");
  closeTab(id);
 });
});

那么,在什么时候调用Addtabs方法呢?答案是注册菜单click事件的时候,这部分代码在前面sidebar-menu组件封装的时候就有,可以看看上面。

如果大家还想深入学习,可以点击这里进行学习,再为大家附两个精彩的专题:Bootstrap学习教程
Bootstrap实战教程

以上就是bootstrap ace模板的菜单和Tab页效果的展示,总的来说,基本的功能具备了,但菜单的样式还有待调整,比如点击某个菜单之后,点击的菜单需要给一个选中的状态。如果你的项目也是用的bootstrap风格,研究下ace模板,可以使用起来试试。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索bootstrap
, tab
, 菜单
ACE
bootstrap 多tab 模板、bootstrap ace模板、bootstrap tab 模板、ace bootstrap 多tab、bootstrap ace tab,以便于您获取更多的相关知识。

时间: 2024-10-23 15:56:00

值得分享的Bootstrap Ace模板实现菜单和Tab页效果_javascript技巧的相关文章

基于bootstrap如何把下拉菜单于标签页对应连接起来

问题描述 基于bootstrap如何把下拉菜单于标签页对应连接起来 基于bootstrap如何把下拉菜单于标签页对应连接起来 Toggle navigation ??H. Peng Home(current) 特点 Where 元谋 丽江 大理 西双版纳 元谋 丽江 大理 西双版纳 <script> $(document).read(function(){ $("#bs-example-navbar-collapse-1 .dropdown-menu a").click(f

Bootstrap入门书籍之(四)菜单、按钮及导航_javascript技巧

我们接下来要学习的东西呢,是Bootstrap为我们提供的一些组件,这些组件的使用非常简单,可以方便快捷帮助我们搭建网站,并且能达到一个不错的显示效果.我们最需要注意的就是: HTML的结构 和bootstrap提供 添加到结构上的类以及属性 . 这些组件的交互功能是依赖于jQuery库实现的,所以还必须引入jQuery.js,且必须在Bootstrap.js之前.正式上线的话直接使用压缩版本就可以了如下: <script src="../js/jquery-min-1.11.3.js&q

Bootstrap实现下拉菜单效果_javascript技巧

下拉菜单用于显示链接列表的可切换.有上下文的菜单. 1.案例 将下拉菜单触发器和下拉菜单都包裹在.dropdown里,然后添加组成菜单的HTML代码. <div class="dropdown"> <button class="btn dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown"> D

ajax级联菜单实现方法实例分析_javascript技巧

本文实例讲述了ajax级联菜单实现方法.分享给大家供大家参考,具体如下: 效果如下: 选择第一项,第二项.第三项的内容跟着改变. 选择第二项,第三项的内容跟着改变. 第三项则不影响第一项和第二项. 有几点值得提: 1.html到底是前台拼接还是后台拼接. 我选择的是前台拼接,这样可以节省流量,和后台的资源.这也比较符合程序处理,一般后台只负责提供数据. 通过json传递给前台,完了前台获取进行处理. ajax函数 function ajaxgetbigclass(val){ $.ajax({ t

bootstrap模态框实现拖拽效果_javascript技巧

本文实例为大家分享了bootstrap模态框实现拖拽效果,供大家参考,具体内容如下 项目中用的有点乱,jquery和angularjs一起搞,有些插件用的jquery版本的,有的插件用的ng版本的.搞到现在测试了一轮又一轮,发现modal模态框有限bug,因为层级的问题,modal框会被左侧菜单遮挡,需求就改成将modal框改成可以拖动的. 网上搜了搜,找到个blog发现基本功能是可用的.但是效果不太友好.问题有以下两个 拖动时候背后文字会被选中,很难看 modal模态框会被拖出边框以外,很难看

javascript实现带下拉子菜单的导航菜单效果_javascript技巧

本文实例讲述了javascript实现带下拉子菜单的导航菜单效果.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&quo

基于Bootstrap实现tab标签切换效果_javascript技巧

本文实例为大家分享了Bootstrap实现tab标签切换效果的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="css/bootstrap.min.css" /> <script

基于Javascript实现二级联动菜单效果_javascript技巧

本文实例为大家分享了Javascript实现二级联动菜单效果的对应代码,具体内容如下 效果图如下: 具体实现步骤如下: 1.所用js代码如下: <script type="text/javascript"> var arr_province=["请选择省份/城市","北京市","上海市","天津市","河南省","山东省","河北省"]

JS+CSS实现滑动切换tab菜单效果_javascript技巧

本文实例讲述了JS+CSS实现滑动切换tab菜单效果.分享给大家供大家参考.具体如下: 这是风格简单的一款JS+CSS滑动门特效代码,当鼠标滑过菜单的时候,二级菜单自动切换,鼠标不需要点击,滑动门效果是个比较流行的网页菜单效果,在网上经常可看到这种菜单的身影.本菜单在火狐.IE8.Chrome下测试通过,代码兼容性还可以,自己用的化再美化一下风格. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-css-move-cha-tab-menu-