【更新】为Layui的Tab选项卡增加关闭当前、关闭其它操作
首先管理端模板的话还是使用官方提供的,参考链接:点此打开后台布局页面
以下我只列举出关键代码,各位根据实际情况拷贝到自己项目适当位置
相比上一篇教程(点击此处查阅)来说,此次除了:
HTML
首先在body里面适当位置处插入以下一段html:
<ul class="rightmenu">
<li data-type="closethis">关闭当前</li>
<li data-type="closeall">关闭所有</li>
<li data-type="closeothers">关闭非当前</li>
<li data-type="closeleft">关闭左侧所有</li>
<li data-type="closeright">关闭右侧所有</li>
<li data-type="refresh">刷新当前页</li>
<li data-type="cancel"><i class="layui-icon layui-icon-yinshenim"></i>取消</li>
</ul>
相关CSS样式请看下面《CSS样式》部分
JS
请在适当位置加入以下代码:
//屏蔽Tab选项卡的右键
$('.layui-tab-title li').on('contextmenu', function () {
return false;
})
/**
* 注册tab右键菜单点击事件
*/
$(".rightmenu li").click(function () {
var currentActiveTabID = $("li[class='layui-this']").attr('lay-id');// 获取当前激活的选项卡ID
var tabtitle = $(".layui-tab-title li");
var allTabIDArr = [];
$.each(tabtitle, function (i) {
allTabIDArr[i] = $(this).attr("lay-id");
})
switch ($(this).attr("data-type")) {
case "closethis"://关闭当前,如果开启了tab可关闭,实际意义不大
tabDelete(currentActiveTabID);
break;
case "closeall"://关闭所有
tabDeleteAll(allTabIDArr);
break;
case "closeothers"://关闭非当前
$.each(allTabIDArr, function (i) {
var tmpTabID = allTabIDArr[i];
if (currentActiveTabID != tmpTabID)
tabDelete(tmpTabID);
})
break;
case "closeleft"://关闭左侧全部
var index = allTabIDArr.indexOf(currentActiveTabID);
tabDeleteAll(allTabIDArr.slice(0, index));
break;
case "closeright"://关闭右侧全部
var index = allTabIDArr.indexOf(currentActiveTabID);
tabDeleteAll(allTabIDArr.slice(index + 1));
break;
case "refresh":
// 重新加载iFrame,实现更新。注意:如果你不是使用的iFrame则无效,具体刷新实现自行处理 //document.getElementById(currentActiveTabID).contentWindow.location.reload(true);//这种方式也可以,下面这个也可以
refreshiFrame();
break;
default:
$('.rightmenu').hide();
}
$('.rightmenu').hide();
})
/*
*重新加载iFrame,实现更新
*/
function refreshiFrame() {
var $curFrame = $('iframe:visible');
$curFrame.attr("src",$curFrame.attr("src"));
return false;
}
tabDelete = function (id) {
console.log("删除的TabID:"+id)
element.tabDelete("你的Tab选项卡ID", id);//删除
}
tabDeleteAll = function (ids) {
$.each(ids, function (i, item) {
element.tabDelete("你的Tab选项卡ID", item);
})
}
注意:
- 以上的“element”为LayUI的“element”模块,引入:
layui.use(["element"],function(){ var element = layui.element; // ..... })
- “你的Tab选项卡ID”:是指你在页面添加的LayUI的选项卡指定的“lay-filter”,例如:
<!-- 内容主体区域 --> <div class="layui-body"> <!-- 顶部切换卡 --> <div class="layui-tab " lay-filter="main-tab" lay-allowClose="true"> <div class="layui-tab-tool open" title="收起"> <i class="wdfont wdicon-xiangzuojiantou"></i> </div> <ul class="layui-tab-title" style="z-index: 999;"> <li lay-id="0" class="layui-this"><i class="wdfont wdicon-shouye"></i>首页</li> </ul> <div class="layui-tab-content"> <div class="layui-tab-item layui-show"> <iframe id="0" src="desktop.html" class="layui-tab-iframe"></iframe> </div> </div> </div> </div>
// 点击空白处关闭右键弹窗
$(document).click(function () {
$('.rightmenu').hide();
})
/**
* 注册并绑定右键菜单
* @constructor
*/
function CustomRightClick () {
//屏蔽Tab右键菜单
$('.layui-tab-title li').on('contextmenu', function () {
return false;
})
$('.layui-tab-title,.layui-tab-title li').click(function () {
$('.rightmenu').hide();
});
$('.layui-tab-title li').on('contextmenu', function (e) {
var popupmenu = $(".rightmenu");
l = ($(document).width() - e.clientX) < popupmenu.width() ? (e.clientX - popupmenu.width()) : e.clientX;
t = ($(document).height() - e.clientY) < popupmenu.height() ? (e.clientY - popupmenu.height()) : e.clientY;
popupmenu.css({left: l, top: t}).show();
return false;
});
}
CustomRightClick()方法实现在右键时弹出菜单,方法的具体调用位置请根据实际情况确定,例如在页面渲染完成之后调用该方法。
CSS样式
<style>
/**右键菜单*/
.rightmenu {
position: absolute;
width: 110px;
z-index: 9999;
display: none;
background-color: #fff;
padding: 2px;
color: #333;
border: 1px solid #eee;
border-radius: 2px;
cursor: pointer;
}
.rightmenu li {
text-align: center;
display: block;
height: 30px;
line-height: 32px;
}
.rightmenu li:hover {
background-color: #666;
color: #fff;
}
</style>
问题
- 右击关闭暂时只能关闭当前已经激活的Tab,没法在任意一个Tab右击自动激活再去关闭,各位可优化一下