layui動態創建Tab、Tab右鍵功能


 

1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4   <meta charset="utf-8">
  5   <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  6   <title>layout 后台大布局 - Layui</title>
  7   <link rel="stylesheet" href="src/css/layui.css">
  8 </head>
  9 <style>
 10     #colcse li a:hover{background:#009688;color:#fff;}
 11 </style>
 12 <body class="layui-layout-body">
 13 <div class="layui-layout layui-layout-admin">
 14   <div class="layui-header">
 15     <div class="layui-logo" >layui 后台布局</div>
 16     <!-- 頭部區域(可配合layui已有的水平導航) -->
 17     <ul class="layui-nav layui-layout-left">
 18       <li class="layui-nav-item"><a href="">控制台</a></li>
 19       <li class="layui-nav-item"><a href="">商品管理</a></li>
 20       <li class="layui-nav-item"><a href="">用戶</a></li>
 21       <li class="layui-nav-item">
 22         <a href="javascript:;">其它系統</a>
 23         <dl class="layui-nav-child">
 24           <dd><a href="">郵件管理</a></dd>
 25           <dd><a href="">消息管理</a></dd>
 26           <dd><a href="">授權管理</a></dd>
 27         </dl>
 28       </li>
 29     </ul>
 30     <ul class="layui-nav layui-layout-right">
 31       <li class="layui-nav-item">
 32         <a href="javascript:;">
 33           <img src="http://t.cn/RCzsdCq" class="layui-nav-img">
 34           賢心
 35         </a>
 36         <dl class="layui-nav-child">
 37           <dd><a href="">基本資料</a></dd>
 38           <dd><a href="">安全設置</a></dd>
 39         </dl>
 40       </li>
 41       <li class="layui-nav-item"><a href="">退了</a></li>
 42     </ul>
 43   </div>
 44   
 45   <div class="layui-side layui-bg-black">
 46     <div class="layui-side-scroll">
 47       <!-- 左側導航區域(可配合layui已有的垂直導航) -->
 48       <ul class="layui-nav layui-nav-tree"  lay-filter="test">
 49         <li class="layui-nav-item layui-nav-itemed">
 50           <a class="" href="javascript:;">所有商品</a>
 51           <dl class="layui-nav-child">
 52             <dd>
 53                 <a data-url="a" data-id="99" data-title="列表一" href="#" class="site-demo-active"    data-type="ltabAdd">列表一</a>
 54             </dd>
 55             <dd>
 56                 <a data-url="a"  data-id="88" data-title="列表二" href="#" class="site-demo-active"    data-type="ltabAdd">列表二</a>
 57             </dd>
 58             <dd>    
 59                 <a data-url="a" data-id="77" data-title="列表三" href="#" class="site-demo-active"    data-type="ltabAdd">列表三</a>
 60             </dd>
 61             <dd>
 62                 <a data-url="a" data-id="66" data-title="列表四" href="#" class="site-demo-active" data-type="ltabAdd">列表四</a>
 63             </dd>
 64           </dl>
 65         </li>
 66         <li class="layui-nav-item ">
 67           <a href="javascript:;">解決方案</a>
 68           <dl class="layui-nav-child">
 69             <dd><a href="javascript:;">列表一</a></dd>
 70             <dd><a href="javascript:;">列表二</a></dd>
 71             <dd><a href="">超鏈接</a></dd>
 72           </dl>
 73         </li>
 74         <li class="layui-nav-item"><a href="">雲市場</a></li>
 75         <li class="layui-nav-item"><a href="">發布商品</a></li>
 76       </ul>
 77     </div>
 78   </div>
 79   
 80   <div class="layui-body" style="background-color: #FFFCF5;">
 81     <!-- 內容主體區域 -->
 82     <div>
 83         
 84  <div id="colcse" class="layui-tab" lay-filter="demo" lay-allowclose="true" >
 85                 <ul class="layui-tab-title">
 86                     <!--
 87                         作者:1669056669@qq.com
 88                         時間:2018-12-24
 89                         描述:存放tab
 90                     -->
 91                 </ul>
 92                 <!--
 93                     作者:1669056669@qq.com
 94                     時間:2018-12-24
 95                     描述:tab右鍵功能
 96                 -->
 97                 <ul class="rightmenu" style=" display: none;position: absolute;background: #6E6C79;font-family: '微軟雅黑';">
 98                     <li id="yue" style="color: red;cursor:pointer;" data-id="" data-type="closethis">
 99                          <a href="#" id="colcse" style="color: white;cursor:pointer;"  data-type="closethis"  >   &nbsp;&nbsp;關閉當前&nbsp;&nbsp;</a>
100                         </li>
101                  
102                     <li data-type="closeall">
103                         <a href="#" id="colcse" style="color: white;cursor:pointer;" data-id=""  data-type="closeall">&nbsp;&nbsp;關閉所有&nbsp;&nbsp;</a>
104                     </li>
105                     
106                     <li data-type="closeothe">
107                         <a href="#" id="colcse" style="color: white;cursor:pointer;" data-id=""  data-type="closeothe">&nbsp;&nbsp;關閉其它&nbsp;&nbsp;</a>
108                     </li>
109                 </ul>
110                 <div class="layui-tab-content">
111                 </div>
112             </div>
113 
114     </div>
115   </div>
116       
117       <div id="test1" data-id = "test" class="layui-panel-window">
118           <input class="layui-table-box" title="9999999" />
119       </div>
120             
121   <div class="layui-footer">
122     <!-- 底部固定區域 -->
123     ©layui - 底部固定區域
124   </div>
125    
126 </div>
127 <script src="src/layui.js" charset="utf-8"></script>
128 <!-- 注意:如果你直接復制所有代碼到本地,上述js路徑需要改成你本地的 -->
129 <script>
130 
131 var ids=0;
132 layui.use('element', function(){
133   var $ = layui.jquery
134   ,element = layui.element; //Tab的切換功能,切換事件監聽等,需要依賴element模塊
135   
136   //觸發事件
137   var active = {
138     tabAdd: function(){
139       //新增一個Tab項
140       element.tabAdd('demo', {
141         title: '新選項'+ (Math.random()*1000|0) //用於演示
142         ,content: '內容'+ (Math.random()*1000|0)
143         ,id: new Date().getTime() //實際使用一般是規定好的id,這里以時間戳模擬下
144       })
145     }
146     ,tabDelete: function(id){
147       //刪除指定Tab項
148       
149       element.tabDelete('demo', id); //刪除:“商品管理”
150       ids=0;
151       //othis.addClass('layui-btn-disabled'); 添加樣式
152     },tabDeleteAll: function(idss){
153         $.each(idss, function(i,item) {
154              element.tabDelete('demo', item); //刪除所有
155         });
156         ids =0;
157     }
158     ,tabChange: function(id){
159       //切換到指定Tab項
160       element.tabChange('demo', id); //切換到:用戶管理
161     },ltabAdd:function(url,id,name){
162                   //新增一個Tab項 傳入三個參數,分別對應其標題,tab頁面的地址,還有一個規定的id,是標簽中data-id的屬性值
163                     //關於tabAdd的方法所傳入的參數可看layui的開發文檔中基礎方法部分
164                     element.tabAdd('demo', {
165                         title: name,
166                         content: '<iframe data-frameid="'+id+'" scrolling="auto" frameborder="0" src="'+url+'.html" style="width:100%;height:99%;"></iframe>',
167                         id: id //規定好的id
168                     })
169                      CustomRightClick(id); //給tab綁定右擊事件
170                      FrameWH();  //計算ifram層的大小
171 
172     }
173   };
174   
175     //當點擊有site-demo-active屬性的標簽時,即左側菜單欄中內容 ,觸發點擊事件
176             $('.site-demo-active').on('click', function() {
177                 var dataid = $(this);
178                 //這時會判斷右側.layui-tab-title屬性下的有lay-id屬性的li的數目,即已經打開的tab項數目
179                 if ($(".layui-tab-title li[lay-id]").length <= 0) {
180                     //如果比零小,則直接打開新的tab項
181                     active.ltabAdd(dataid.attr("data-url"), dataid.attr("data-id"),dataid.attr("data-title"));
182                 } else {
183                     //否則判斷該tab項是否以及存在
184                                     
185                     var isData = false; //初始化一個標志,為false說明未打開該tab項 為true則說明已有
186                     $.each($(".layui-tab-title li[lay-id]"), function () {
187                         //如果點擊左側菜單欄所傳入的id 在右側tab項中的lay-id屬性可以找到,則說明該tab項已經打開
188                         if ($(this).attr("lay-id") == dataid.attr("data-id")) {
189                             isData = true;
190                         }
191                     })
192                     if (isData == false) {
193                         //標志為false 新增一個tab項
194                         active.ltabAdd(dataid.attr("data-url"), dataid.attr("data-id"),dataid.attr("data-title"));
195                     }
196                 }
197                 //最后不管是否新增tab,最后都轉到要打開的選項頁面上
198                 active.tabChange(dataid.attr("data-id"));
199             });
200   //Hash地址的定位
201   var layid = location.hash.replace(/^#test=/, '');
202   element.tabChange('test', layid);
203   
204   element.on('tab(test)', function(elem){
205     location.hash = 'test='+ $(this).attr('lay-id');
206   });
207   
208     function FrameWH() {
209                 var h = $(window).height() -41- 10 - 60 -10-44 -10;
210                 $("iframe").css("height",h+"px");
211             }
212 
213             $(window).resize(function () {
214                 FrameWH();
215             })
216             
217       
218             function CustomRightClick(id) {
219                 //取消右鍵  rightmenu屬性開始是隱藏的 ,當右擊的時候顯示,左擊的時候隱藏
220                 $('.layui-tab-title li').on('contextmenu', function () { return false; })
221                 $('.layui-tab-title,.layui-tab-title li').click(function () {
222                     $('.rightmenu').hide();
223                     ids=0;
224                 });
225                 
226                 //桌面點擊右擊 
227                 $('.layui-tab-title li').on('contextmenu', function (e) {
228                     
229                     var popupmenu = $(".rightmenu");
230                     ids +=1;
231                     if(ids >1){
232                         return true;
233                     }
234                     popupmenu.find("li").attr("data-id",id); //在右鍵菜單中的標簽綁定id屬性
235 
236                     //判斷右側菜單的位置 
237                     l = ($(document).width() - e.clientX) < popupmenu.width() ? (e.clientX - popupmenu.width()) : e.clientX;
238                     t = ($(document).height() - e.clientY) < popupmenu.height() ? (e.clientY - popupmenu.height()) : e.clientY;
239                    
240                     popupmenu.css({ left: l-190, top: t-50 }).show(); //進行絕對定位
241                     //alert("右鍵菜單")
242                     return false;
243                 });
244             }
245               $(".rightmenu li").click(function () {
246                 //右鍵菜單中的選項被點擊之后,判斷type的類型,決定關閉所有還是關閉當前。
247                 if ($(this).attr("data-type") == "closethis") {
248                     //如果關閉當前,即根據顯示右鍵菜單時所綁定的id,執行tabDelete
249                     
250                     active.tabDelete($(this).attr("data-id"));
251                 } else if ($(this).attr("data-type") == "closeall") {
252                     var tabtitle = $(".layui-tab-title li");
253                     var ids = new Array();
254                     $.each(tabtitle, function (i) {
255                         ids[i] = $(this).attr("lay-id");
256                     })
257                     //如果關閉所有 ,即將所有的lay-id放進數組,執行tabDeleteAll
258                     active.tabDeleteAll(ids);
259                 }else if($(this).attr("data-type") =="closeothe"){
260                         var id =$(this).attr("data-id"); 
261                         var tabtitle = $(".layui-tab-title li");
262                     var ids = new Array();
263                     $.each(tabtitle, function (i) {
264                         if(id != $(this).attr("lay-id")){
265                         ids[i] = $(this).attr("lay-id");
266                        }
267                     })
268                     active.tabDeleteAll(ids);
269                 }
270 
271                 $('.rightmenu').hide(); //最后再隱藏右鍵菜單
272             })
273             
274 });
275 </script>
276 </body>
277 </html>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM