栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

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

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

一、效果展示

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

1、初始加载出来的效果

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

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

4、支持菜单折叠

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

二、代码示例

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

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



 
 

 
 
 
 

 
 

  

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

 
  
  
   
  
  

再来看看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 = $('
  • '); var a = $(''); var icon = $(''); //icon.addClass('glyphicon'); icon.addClass(item.icon); var text = $(''); 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 = $(''); arrow.addClass('arrow').addClass('icon-angle-down'); a.append(arrow); li.append(a); var menus = $('
      '); 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引用。
       
      页面的html标签:

       
         
         
          
          
          
          
          
         
         
        
        
      

      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 = '';
       //是否指定TAB内容
       if (options.content) {
        content = '' + options.content + '';
       } else {//没有内容,使用Iframe打开链接
        content = '';
       }
       //加入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模板,可以使用起来试试。

      转载请注明:文章转载自 www.mshxw.com
      本文地址:https://www.mshxw.com/it/99088.html
      我们一直用心在做
      关于我们 文章归档 网站地图 联系我们

      版权所有 (c)2021-2022 MSHXW.COM

      ICP备案号:晋ICP备2021003244-6号