1. 程式人生 > >layui之Tab選項卡

layui之Tab選項卡

Tab廣泛應用於Web頁面,因此layui也對其進行了良好的支援。Layui內建多種Tab風格,支援刪除選項卡、並提供響應式支援。 
這是一個最基本的例子:

<div class="layui-tab">
  <ul class="layui-tab-title">
    <li class="layui-this">網站設定</li>
    <li>使用者管理</li>
    <li>許可權分配</li>
    <li>商品管理</li>
    <li>訂單管理</li>
  </ul>
  <div class="layui-tab-content">
    <div class="layui-tab-item layui-show">內容1</div>
    <div class="layui-tab-item">內容2</div>
    <div class="layui-tab-item">內容3</div>
    <div class="layui-tab-item">內容4</div>
    <div class="layui-tab-item">內容5</div>
  </div>
</div>
 
<script>
//注意:選項卡 依賴 element 模組,否則無法進行功能性操作
layui.use('element', function(){
  var element = layui.element;
  
  //…
});
</script>

<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
  <ul class="layui-tab-title">
    <li class="layui-this">網站設定</li>
    <li>使用者管理</li>
    <li>許可權分配</li>
    <li>商品管理</li>
    <li>訂單管理</li>
  </ul>
  <div class="layui-tab-content"></div>
</div>     

通過追加class:layui-tab-brief 來設定簡潔風格。
值得注意的是,如果存在 layui-tab-item 的內容區域,在切換時自動定位到對應內容。如果不存在內容區域,則不會定位到對應內容。你通常需要設定過濾器,通過 element模組的監聽tab事件來進行切換操作。詳見文件左側【內建元件 - 基本元素操作 element】

<div class="layui-tab layui-tab-card">
  <ul class="layui-tab-title">
    <li class="layui-this">網站設定</li>
    <li>使用者管理</li>
    <li>許可權分配</li>
    <li>商品管理</li>
    <li>訂單管理</li>
  </ul>
  <div class="layui-tab-content" style="height: 100px;">
    <div class="layui-tab-item layui-show">1</div>
    <div class="layui-tab-item">2</div>
    <div class="layui-tab-item">3</div>
    <div class="layui-tab-item">4</div>
    <div class="layui-tab-item">5</div>
    <div class="layui-tab-item">6</div>
  </div>
</div>

通過追加class:layui-tab-card來設定卡片風格

當容器的寬度不足以顯示全部的選項時,即會自動出現展開圖示,如下以卡片風格為例(注意:所有Tab風格都支援響應式):

額,感覺像是打了個小醬油。而事實上在自適應的頁面中(不固寬),它的意義才會呈現。

你可以對父層容器設定屬性 lay-allowClose="true" 來允許Tab選項卡被刪除

<div class="layui-tab" lay-allowClose="true">
  <ul class="layui-tab-title">
    <li class="layui-this">網站設定</li>
    <li>使用者基本管理</li>
    <li>許可權分配</li>
    <li>全部歷史商品管理文字長一點試試</li>
    <li>訂單管理</li>
  </ul>
  <div class="layui-tab-content">
    <div class="layui-tab-item layui-show">1</div>
    <div class="layui-tab-item">2</div>
    <div class="layui-tab-item">3</div>
    <div class="layui-tab-item">4</div>
    <div class="layui-tab-item">5</div>
    <div class="layui-tab-item">6</div>
  </div>
</div>

與預設相比沒有什麼特別的結構,就是多了個屬性 lay-allowClose="true"

你可以通過對選項卡設定屬性 lay-id="xxx" 來作為唯一的匹配索引,以用於外部的定位切換,如後臺的左側導航、以及頁面地址 hash的匹配。

<div class="layui-tab" lay-filter="test1">
  <ul class="layui-tab-title">
    <li class="layui-this" lay-id="111" >文章列表</li>
    <li lay-id="222">傳送資訊</li>
    <li lay-id="333">許可權分配</li>
    <li lay-id="444">稽核</li>
    <li lay-id="555">訂單管理</li>
  </ul>
  <div class="layui-tab-content">
    <div class="layui-tab-item layui-show">1</div>
    <div class="layui-tab-item">2</div>
    <div class="layui-tab-item">3</div>
    <div class="layui-tab-item">4</div>
    <div class="layui-tab-item">5</div>
  </div>
</div>

屬性 lay-id 是扮演這項功能的主要角色,它是動態操作的重要憑據,如:

<script>
layui.use('element', function(){
  var element = layui.element;
  
  //獲取hash來切換選項卡,假設當前地址的hash為lay-id對應的值
  var layid = location.hash.replace(/^#test1=/, '');
  element.tabChange('test1', layid); //假設當前地址為:http://a.com#test1=222,那麼選項卡會自動切換到“傳送訊息”這一項
  
  //監聽Tab切換,以改變地址hash值
  element.on('tab(test1)', function(){
    location.hash = 'test1='+ this.getAttribute('lay-id');
  });
});
</script>   

同樣的還有增加選項卡和刪除選項卡,都需要用到 lay-id

提示

無論是導航、還是Tab,都需依賴 element模組,大部分行為都是在載入完該模組後自動完成的,但一些互動操作,如Tab事件監聽等,需按照場景選擇性使用。

選項卡的全部程式碼如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>layui</title>
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <link rel="stylesheet" href="//res.layui.com/layui/dist/css/layui.css"  media="all">
  <!-- 注意:如果你直接複製所有程式碼到本地,上述css路徑需要改成你本地的 -->
</head>
<body>
              
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
  <legend>預設風格的Tab</legend>
</fieldset>
 
<div class="layui-tab">
  <ul class="layui-tab-title">
    <li class="layui-this">網站設定</li>
    <li>使用者管理</li>
    <li>許可權分配</li>
    <li>商品管理</li>
    <li>訂單管理</li>
  </ul>
  <div class="layui-tab-content">
    <div class="layui-tab-item layui-show">
      1. 高度預設自適應,也可以隨意固寬。
      <br>2. Tab進行了響應式處理,所以無需擔心數量多少。
    </div>
    <div class="layui-tab-item">內容2</div>
    <div class="layui-tab-item">內容3</div>
    <div class="layui-tab-item">內容4</div>
    <div class="layui-tab-item">內容5</div>
  </div>
</div>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;">
  <legend>動態操作Tab</legend>
</fieldset>
 
<div class="layui-tab" lay-filter="demo" lay-allowclose="true">
  <ul class="layui-tab-title">
    <li class="layui-this" lay-id="11">網站設定</li>
    <li lay-id="22">使用者管理</li>
    <li lay-id="33">許可權分配</li>
    <li lay-id="44">商品管理</li>
    <li lay-id="55">訂單管理</li>
  </ul>
  <div class="layui-tab-content">
    <div class="layui-tab-item layui-show">內容1</div>
    <div class="layui-tab-item">內容2</div>
    <div class="layui-tab-item">內容3</div>
    <div class="layui-tab-item">內容4</div>
    <div class="layui-tab-item">內容5</div>
  </div>
</div>
<div class="site-demo-button" style="margin-bottom: 0;">
  <button class="layui-btn site-demo-active" data-type="tabAdd">新增Tab項</button>
  <button class="layui-btn site-demo-active" data-type="tabDelete">刪除:商品管理</button>
  <button class="layui-btn site-demo-active" data-type="tabChange">切換到:使用者管理</button>
</div>
 
<!-- 示例-970 -->
<ins class="adsbygoogle" style="display:inline-block;width:970px;height:90px" data-ad-client="ca-pub-6111334333458862" data-ad-slot="3820120620"></ins>
  
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;">
  <legend>Hash地址定位</legend>
</fieldset>
<div class="layui-tab" lay-filter="test">
  <ul class="layui-tab-title">
    <li class="layui-this" lay-id="11">網站設定</li>
    <li lay-id="22">使用者管理</li>
    <li lay-id="33">許可權分配</li>
    <li lay-id="44">商品管理</li>
    <li lay-id="55">訂單管理</li>
  </ul>
  <div class="layui-tab-content">
    <div class="layui-tab-item layui-show">
      點選該Tab的任一標題,觀察位址列變化,再重新整理頁面。選項卡將會自動定位到上一次切換的項
    </div>
    <div class="layui-tab-item">內容2</div>
    <div class="layui-tab-item">內容3</div>
    <div class="layui-tab-item">內容4</div>
    <div class="layui-tab-item">內容5</div>
  </div>
</div>
 
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;">
  <legend>簡潔風格的Tab</legend>
</fieldset>
 
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
  <ul class="layui-tab-title">
    <li class="layui-this">網站設定</li>
    <li>使用者管理</li>
    <li>許可權分配</li>
    <li>商品管理</li>
    <li>訂單管理</li>
  </ul>
  <div class="layui-tab-content" style="height: 100px;">
    <div class="layui-tab-item layui-show">內容不一樣是要有,因為你可以監聽tab事件(閱讀下文件就是了)</div>
    <div class="layui-tab-item">內容2</div>
    <div class="layui-tab-item">內容3</div>
    <div class="layui-tab-item">內容4</div>
    <div class="layui-tab-item">內容5</div>
  </div>
</div> 
 
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;">
  <legend>卡片風格的Tab</legend>
</fieldset>
 
<div class="layui-tab layui-tab-card">
  <ul class="layui-tab-title">
    <li class="layui-this">網站設定</li>
    <li>使用者管理</li>
    <li>許可權分配</li>
    <li>商品管理</li>
    <li>訂單管理</li>
  </ul>
  <div class="layui-tab-content" style="height: 100px;">
    <div class="layui-tab-item layui-show">預設寬度是相對於父元素100%適應的,你也可以固定寬度。</div>
    <div class="layui-tab-item">2</div>
    <div class="layui-tab-item">3</div>
    <div class="layui-tab-item">4</div>
    <div class="layui-tab-item">5</div>
    <div class="layui-tab-item">6</div>
  </div>
</div>
 
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;">
  <legend>當Tab數超過一定寬度</legend>
</fieldset>
 
<div class="layui-tab layui-tab-card" style="width: 290px;">
  <ul class="layui-tab-title">
    <li class="layui-this">網站設定</li>
    <li>使用者管理</li>
    <li>許可權分配</li>
    <li>商品管理</li>
    <li>訂單管理</li>
  </ul>
  <div class="layui-tab-content" style="height: 100px;">
    <div class="layui-tab-item layui-show">
      1. 寬度足夠,就不會出現右上圖示;寬度不夠,就會開啟展開功能。
      <br>2. 如果你的寬度是自適應的,Tab會自動判斷是否需要展開,並適用於所有風格。
    </div>
    <div class="layui-tab-item">2</div>
    <div class="layui-tab-item">3</div>
    <div class="layui-tab-item">4</div>
    <div class="layui-tab-item">5</div>
    <div class="layui-tab-item">6</div>
  </div>
</div>
 
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 50px;">
  <legend>帶刪除功能的Tab</legend>
</fieldset>
 
<div class="layui-tab layui-tab-card" lay-allowclose="true">
  <ul class="layui-tab-title">
    <li class="layui-this">網站設定</li>
    <li>使用者基本管理</li>
    <li>許可權分配</li>
    <li>商品管理</li>
    <li>訂單管理</li>
  </ul>
  <div class="layui-tab-content" style="height: 150px;">
    <div class="layui-tab-item layui-show">
      1. 我個人比較喜歡卡片風格的,所以你發現又是以卡片的風格舉例
      2. 刪除功能適用於所有風格
    </div>
    <div class="layui-tab-item">2</div>
    <div class="layui-tab-item">3</div>
    <div class="layui-tab-item">4</div>
    <div class="layui-tab-item">5</div>
    <div class="layui-tab-item">6</div>
  </div>
</div>             
          
<script src="//res.layui.com/layui/dist/layui.js" charset="utf-8"></script>
<!-- 注意:如果你直接複製所有程式碼到本地,上述js路徑需要改成你本地的 -->
<script>
layui.use('element', function(){
  var $ = layui.jquery
  ,element = layui.element; //Tab的切換功能,切換事件監聽等,需要依賴element模組
  
  //觸發事件
  var active = {
    tabAdd: function(){
      //新增一個Tab項
      element.tabAdd('demo', {
        title: '新選項'+ (Math.random()*1000|0) //用於演示
        ,content: '內容'+ (Math.random()*1000|0)
        ,id: new Date().getTime() //實際使用一般是規定好的id,這裡以時間戳模擬下
      })
    }
    ,tabDelete: function(othis){
      //刪除指定Tab項
      element.tabDelete('demo', '44'); //刪除:“商品管理”
      
      
      othis.addClass('layui-btn-disabled');
    }
    ,tabChange: function(){
      //切換到指定Tab項
      element.tabChange('demo', '22'); //切換到:使用者管理
    }
  };
  
  $('.site-demo-active').on('click', function(){
    var othis = $(this), type = othis.data('type');
    active[type] ? active[type].call(this, othis) : '';
  });
  
  //Hash地址的定位
  var layid = location.hash.replace(/^#test=/, '');
  element.tabChange('test', layid);
  
  element.on('tab(test)', function(elem){
    location.hash = 'test='+ $(this).attr('lay-id');
  });
  
});
</script>

</body>
</html>