使用jQuery开发tab选项卡插件(可以右键关闭多个标签)
在前一篇“使用jQuery开发tab选项卡插件”的基础上添加了tab标签右键关闭菜单功能,菜单主要包括:关闭当前标签、关闭左侧标签、关闭右侧标签、关闭其他、关闭全部。
一、插件效果

二、实现思路
为window对象添加右键菜单事件监听:
当事件源对象为tab标签时,取消默认的右键菜单,显示菜单div即设置display: block,并为每一个菜单项添加事件监听;
当事件源对象不为tab标签时,关闭菜单div即设置display: none
为window对象添加单击事件监听:关闭菜单div即设置display: none
三、主要元素样式
.tab-contextmenu {
display: none;
position: absolute;
width: 140px;
height: 125px;
padding: 5px;
overflow: hidden;
border: 1px solid #dddddd;
box-shadow: 1px 1px 1px #888;
background: #FFFFFF;
}
.tab-contextmenu .tab-contextmenu-item {
width: 120px;
height: 25px;
padding: 0 10px;
font-size: 14px;
line-height: 25px;
cursor: pointer;
}
.tab-contextmenu .tab-contextmenu-item:hover {
color: #FFFFFF;
background: #999;
}
四、函数和事件监听
1、生成菜单div函数
/**
* 初始化标签右键菜单
*/
function initContextMenu() {
var contextMenu = $("body .tab-contextmenu");
if (!contextMenu[0]) {
$("<div class='tab-contextmenu'></div>")
.append(createContextMenuItem("关闭当前标签", "current"))
.append(createContextMenuItem("关闭左侧标签", "prevAll"))
.append(createContextMenuItem("关闭右侧标签", "nextAll"))
.append(createContextMenuItem("关闭其他", "other"))
.append(createContextMenuItem("关闭全部", "all"))
.appendTo("body");
}
// 创建一个右键菜单项
function createContextMenuItem(text, target) {
return $("<div class='tab-contextmenu-item'></div>").html(text).attr("target", target);
}
}
2、window事件监听
/**
* 初始化tab标签的右键菜单功能
*/
function initWindowContextMenu() {
// 给body绑定两个事件
$("body")
// 右键菜单显示
.bind("contextmenu", contextMenuHandler)
// 关闭右键菜单
.on("click", function() {
$(".tab-contextmenu").css("display", "none");
}); } /**
* body元素的contextmenu事件执行函数
* @param {Object} ev
*/
function contextMenuHandler(ev) { // 获取事件对象,需要兼容IE
var e = ev || window.event; // 获取自定义的右键菜单
var menu = $(".tab-contextmenu"); // 获取事件源
// e.srcElement,兼容IE、360、chrome
// e.target,兼容Firefox
src = $(e.srcElement || e.target); // 如果事件源对象是tab标签才显示右键菜单、绑定事件
if (src.hasClass("tab-header-item")) {
// 获取tab组件
var tab = src.parent().parent();
// 选中点击的标签
tab.tab("selectTab", src.attr("target"));
// 取消默认的浏览器右键菜单
e.preventDefault();
// 根据事件对象中鼠标点击的位置,进行定位
// 之后根据点击的标签进行事件绑定
menu
.css({"left": e.clientX + 'px', "top": e.clientY + 'px', "display": "block"})
.children().unbind("click").bind("click", function() {
// 判断关闭类型:关闭当前标签、关闭左侧标签、关闭右侧标签、关闭其他、关闭全部
switch($(this).attr("target")){
case 'current':
return removeTabs(tab, src);
case 'prevAll':
return removeTabs(tab, src.prevAll());
case 'nextAll':
return removeTabs(tab, src.nextAll());
case 'other':
return removeTabs(tab, src.siblings());
case 'all':
return removeTabs(tab, src.parent().children());
}
});
} else {
menu.css("display", "none");
}
}
3、批量关闭标签
/**
* 批量删除tab选项卡
* @param {Object} $tab
* @param {Object} items
*/
function removeTabs($tab, items) {
// 遍历需要关闭的标签对象,逐一进行关闭
items.each(function() {
// 调用removeTab函数关闭一个需要关闭的标签
removeTab($tab, $(this).attr("target"));
});
}
使用jQuery开发tab选项卡插件(可以右键关闭多个标签)的更多相关文章
- 使用jQuery开发tab选项卡插件
为了复习巩固jQuery的插件开发.HTML和CSS方面的知识,做了一个简单的tab选项卡插件,简单记录一下开发.使用的过程,以备日后使用. 一.插件效果 tab选项卡插件常用的功能均已实现,包括:动 ...
- jQuery 开发一个简易插件
jQuery 开发一个简易插件 //主要内容 $.changeCss = function(options){ var defaults = { color:'blue', ele:'text', f ...
- jQuery实现TAB选项卡切换特效简单演示
本文实例为大家分享jQuery实现TAB选项卡切换特效,供大家参考,具体内容如下 1.tab切换 on ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 ...
- 一款基于jQuery的热点新闻Tab选项卡插件
今天要分享的jQuery焦点图插件非常适合展示热点新闻,之前我们分享过好多基于jQuery的焦点图插件,效果都还很不错.它可以在图片上方展示文字标题,并且焦点图的切换按钮时tab风格的,图片切换也十分 ...
- [转]jquery开发自定义的插件总结
本文转自:http://www.cnblogs.com/Jimmy009/archive/2013/01/17/jquery%E6%8F%92%E4%BB%B6.html 前几天在玩jquery,今天 ...
- 使用jQuery开发accordion手风琴插件
一.插件效果 手风琴插件常用的功能均已实现,包括:手风琴菜单项的折叠展开效果.选中指定菜单项.判断菜单项是否选中等. 效果如下: 二.插件内部HTML元素结构 <!-- accordioon组件 ...
- js和jquery实现tab选项卡
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JQuery开发工具和插件
最近的研究jquery.为大家介绍几款开发工具.能够帮助你提高开发的效率. 1.Dreamweaver Dreamweaver是建立在WEB站点和应用程序的专业工具. 将可视化工具.应用程序开发功能和 ...
- 基于jQuery开发的手风琴插件 jquery.accordion.js
1.插件代码 少说多做,基于jQuery的手风琴插件jquery.accordion.js的代码: /* * 手风琴插件说明: * 1.treeTrunk对应树干 * 2.treeLeaf对应树叶 ...
随机推荐
- D3.js的v5版本入门教程(第四章)—— 理解Update、Enter、Exit
D3.js的v5版本入门教程(第四章) Update.Enter.Exit是D3.js中很重要的概念,下面来讲一下它们到底是什么?(当你看完后.你就会知道如果数据集个数和选择集个数不匹配的情况下使用d ...
- idea乱码问题
## 1. 文件中内容中文乱码 这个原因是文件的编码和项目的编码不一致导致,将项目工程和文件的编码设置成一致的(如,文件编码是GBK,那就都设置为GBK,若为UTF-8就都设置为UTF-8) ## 2 ...
- 【软工实践】Alpha冲刺(4/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 学习调用中国天气网API,接近实现天气推送功能 对天气推送的形式进行讨论及重确 ...
- 东站七雄保C位!论三线楼市网红板块的自我修养
不对!东站板块才是伍家岗的C位.这里有东站七雄! 前些天发了一篇城东C位之路的文章,居然引发了诸葛说房聊天群内大佬的激烈纷争.公说公有理婆说婆有理,一时争的是不可开交,大有约架之势.所以我决定提前写& ...
- 【spring源码分析】IOC容器解析
参考: https://www.iteye.com/topic/1121913(自动注入bean的扫描器) https://m.imooc.com/mip/article/34150(循环依赖的解决方 ...
- oracle/mysql java jdbc类型映射
MySQL数据类型 JAVA数据类型 JDBC TYPE 普通变量类型 主键类型 BIGINT Long BIGINT 支持 支持 TINYINT Byte TINYINT 支持 不支持 SMALLI ...
- index row size 2720 exceeds maximum 2712 for index "xxx" ,Values larger than 1/3 of a buffer page cannot be indexed.
记录一个bug情况: 我有个表NewTable,复合主键(slaveid,resid,owner) CREATE TABLE "public"."NewTable&quo ...
- [LeetCode] 146. LRU Cache 近期最少使用缓存
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...
- [LeetCode] 326. Power of Three 3的次方数
Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it ...
- Component 'TABCTL32.OCX'错误的处理方法
错误:Component 'TABCTL32.OCX' or one of its dependencies not correctyly registered:a file is missing o ...