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

一、插件效果

  

二、实现思路

为window对象添加右键菜单事件监听:

当事件源对象为tab标签时,取消默认的右键菜单,显示菜单div即设置display: block,并为每一个菜单项添加事件监听;

当事件源对象不为tab标签时,关闭菜单div即设置display: none

为window对象添加单击事件监听:关闭菜单div即设置display: none

三、主要元素样式

  1. .tab-contextmenu {
  2. display: none;
  3. position: absolute;
  4. width: 140px;
  5. height: 125px;
  6. padding: 5px;
  7. overflow: hidden;
  8. border: 1px solid #dddddd;
  9. box-shadow: 1px 1px 1px #888;
  10. background: #FFFFFF;
  11. }
  12. .tab-contextmenu .tab-contextmenu-item {
  13. width: 120px;
  14. height: 25px;
  15. padding: 0 10px;
  16. font-size: 14px;
  17. line-height: 25px;
  18. cursor: pointer;
  19. }
  20. .tab-contextmenu .tab-contextmenu-item:hover {
  21. color: #FFFFFF;
  22. background: #999;
  23. }

四、函数和事件监听

1、生成菜单div函数
  1. /**
  2. * 初始化标签右键菜单
  3. */
  4. function initContextMenu() {
  5. var contextMenu = $("body .tab-contextmenu");
  6. if (!contextMenu[0]) {
  7. $("<div class='tab-contextmenu'></div>")
  8. .append(createContextMenuItem("关闭当前标签", "current"))
  9. .append(createContextMenuItem("关闭左侧标签", "prevAll"))
  10. .append(createContextMenuItem("关闭右侧标签", "nextAll"))
  11. .append(createContextMenuItem("关闭其他", "other"))
  12. .append(createContextMenuItem("关闭全部", "all"))
  13. .appendTo("body");
  14. }
  15. // 创建一个右键菜单项
  16. function createContextMenuItem(text, target) {
  17. return $("<div class='tab-contextmenu-item'></div>").html(text).attr("target", target);
  18. }
  19. }
2、window事件监听
  1. /**
  2. * 初始化tab标签的右键菜单功能
  3. */
  4. function initWindowContextMenu() {
  5. // 给body绑定两个事件
  6. $("body")
  7. // 右键菜单显示
  8. .bind("contextmenu", contextMenuHandler)
  9. // 关闭右键菜单
  10. .on("click", function() {
  11. $(".tab-contextmenu").css("display", "none");
  12. });
  13.  
  14. }
  15.  
  16. /**
  17. * body元素的contextmenu事件执行函数
  18. * @param {Object} ev
  19. */
  20. function contextMenuHandler(ev) {
  21.  
  22. // 获取事件对象,需要兼容IE
  23. var e = ev || window.event;
  24.  
  25. // 获取自定义的右键菜单
  26. var menu = $(".tab-contextmenu");
  27.  
  28. // 获取事件源
  29. // e.srcElement,兼容IE、360、chrome
  30. // e.target,兼容Firefox
  31. src = $(e.srcElement || e.target);
  32.  
  33. // 如果事件源对象是tab标签才显示右键菜单、绑定事件
  34. if (src.hasClass("tab-header-item")) {
  35. // 获取tab组件
  36. var tab = src.parent().parent();
  37. // 选中点击的标签
  38. tab.tab("selectTab", src.attr("target"));
  39. // 取消默认的浏览器右键菜单
  40. e.preventDefault();
  41. // 根据事件对象中鼠标点击的位置,进行定位
  42. // 之后根据点击的标签进行事件绑定
  43. menu
  44. .css({"left": e.clientX + 'px', "top": e.clientY + 'px', "display": "block"})
  45. .children().unbind("click").bind("click", function() {
  46. // 判断关闭类型:关闭当前标签、关闭左侧标签、关闭右侧标签、关闭其他、关闭全部
  47. switch($(this).attr("target")){
  48. case 'current':
  49. return removeTabs(tab, src);
  50. case 'prevAll':
  51. return removeTabs(tab, src.prevAll());
  52. case 'nextAll':
  53. return removeTabs(tab, src.nextAll());
  54. case 'other':
  55. return removeTabs(tab, src.siblings());
  56. case 'all':
  57. return removeTabs(tab, src.parent().children());
  58. }
  59. });
  60. } else {
  61. menu.css("display", "none");
  62. }
  63. }
3、批量关闭标签
  1. /**
  2. * 批量删除tab选项卡
  3. * @param {Object} $tab
  4. * @param {Object} items
  5. */
  6. function removeTabs($tab, items) {
  7. // 遍历需要关闭的标签对象,逐一进行关闭
  8. items.each(function() {
  9. // 调用removeTab函数关闭一个需要关闭的标签
  10. removeTab($tab, $(this).attr("target"));
  11. });
  12. }

使用jQuery开发tab选项卡插件(可以右键关闭多个标签)的更多相关文章

  1. 使用jQuery开发tab选项卡插件

    为了复习巩固jQuery的插件开发.HTML和CSS方面的知识,做了一个简单的tab选项卡插件,简单记录一下开发.使用的过程,以备日后使用. 一.插件效果 tab选项卡插件常用的功能均已实现,包括:动 ...

  2. jQuery 开发一个简易插件

    jQuery 开发一个简易插件 //主要内容 $.changeCss = function(options){ var defaults = { color:'blue', ele:'text', f ...

  3. 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 ...

  4. 一款基于jQuery的热点新闻Tab选项卡插件

    今天要分享的jQuery焦点图插件非常适合展示热点新闻,之前我们分享过好多基于jQuery的焦点图插件,效果都还很不错.它可以在图片上方展示文字标题,并且焦点图的切换按钮时tab风格的,图片切换也十分 ...

  5. [转]jquery开发自定义的插件总结

    本文转自:http://www.cnblogs.com/Jimmy009/archive/2013/01/17/jquery%E6%8F%92%E4%BB%B6.html 前几天在玩jquery,今天 ...

  6. 使用jQuery开发accordion手风琴插件

    一.插件效果 手风琴插件常用的功能均已实现,包括:手风琴菜单项的折叠展开效果.选中指定菜单项.判断菜单项是否选中等. 效果如下: 二.插件内部HTML元素结构 <!-- accordioon组件 ...

  7. js和jquery实现tab选项卡

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. JQuery开发工具和插件

    最近的研究jquery.为大家介绍几款开发工具.能够帮助你提高开发的效率. 1.Dreamweaver Dreamweaver是建立在WEB站点和应用程序的专业工具. 将可视化工具.应用程序开发功能和 ...

  9. 基于jQuery开发的手风琴插件 jquery.accordion.js

     1.插件代码 少说多做,基于jQuery的手风琴插件jquery.accordion.js的代码:  /* * 手风琴插件说明: * 1.treeTrunk对应树干 * 2.treeLeaf对应树叶 ...

随机推荐

  1. ICEM-两管相贯

    原视频下载地址:https://pan.baidu.com/s/1qYe0AzM 密码: tmd5

  2. ubuntu之路——day15.2 只用python的numpy在底层检验正则化对模型的影响

    首先感谢这位博主整理的Andrew Ng的deeplearning.ai的相关作业:https://blog.csdn.net/u013733326/article/details/79827273 ...

  3. MQTT 与 RocketMQ 的应用场景对比

    本文主要在什么是微消息队列 MQTT?的基础上介绍微消息队列 MQTT 和传统消息中间件的关联和区别,并针对实际应用场景下的产品选型给出建议. 背景信息 传统的消息中间件,例如消息队列 RocketM ...

  4. np.concatenate

  5. typescript - 5.接口

    接口的作用: 在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用.接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不 ...

  6. linux升级python到2.7版本

    linux的python安装包默认版本是2.6.6,yum程序默认也是依赖这个版本的python包的,但是其他一些程序如nodejs,却要的是2.7版本,因此必须要考虑升级后与yum的兼容问题.两步走 ...

  7. QT中常用工具总结

    1.qmake 利用.pro文件生成Makefile 命令为: eg: qmake -o Makefile hello.pro 2. uic 利用ui界面审查.h头文件 命令为: eg: uic go ...

  8. 【LeetCode算法-21】Merge Two Sorted Lists

    LeetCode第21题 Merge two sorted linked lists and return it as a new list. The new list should be made ...

  9. Java通过行为参数化传递代码

    在软件工程中,一个众所周知的问题就是,不管做什么,用户的需求肯定会变.如何应对这样不断变化的需求?理想的状态下,应该把的工作量降到最少.此外,类似的新功能实现起来还应该很简单,而且易于长期维护.行为参 ...

  10. FromXml 支付回调 xml 转数组

    public function xx(){ $xml = '<xml><appid><![CDATA[xxxxxxxxxxxxx]]></appid> ...