1. 程式人生 > >Bootstrap Ace模板實現選單和Tab頁效果

Bootstrap Ace模板實現選單和Tab頁效果

Bootstrap Ace模板實現選單和Tab頁效果

這篇文章主要為大家分享了基於Bootstrap Ace模板實現選單和Tab頁效果,感興趣的小夥伴們可以參考一下
本文分享了專案中使用Ace模板的選單樣式和基於iframe的Tab頁效果。


一、效果展示

1、折騰了好久,終於將選單樣式和Tab頁的效果從專案中抽出來了。

首頁

2、展開選單(支援多級展開,後面程式碼介紹)

選單展開

3、點選子選單,以Tab頁的形式開啟對應的頁面

tab展開
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檔案()是博主自己封裝的,其他基本都是些元件需要的特性元件。看看頁面上面要放哪些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模板,可以使用起來試試。