1、要想实现右键菜单,就要先能响应右键函数

$('#down').mousedown(function(e){
if(3 == e.which){
alert('这是右键单击事件');
}else if(1 == e.which){
alert('这是左键单击事件');
}
})

2、通过上面方法,虽然弹出了右键菜单,但是浏览器系统菜单也会出现。

$('#down')[0].oncontextmenu = function ()
{
return false;
}

3、如果单纯右键函数可以直接用第二种写法

  $('#context').contextmenu(function ()
{
alert('这是右键菜单事件');
return false;
});

4、如果再定义一个div层,在contextmenu把div层显示出来即形成一个菜单

通常情况下,会使用ul,ol,dl实现,dl有前后级关系,但是大部分情况下都定义了,padding:0;margin:0会导致自动层级关系失效,所以使用ul,li实现。

5、定义div

   <div class="jgui-menu">
<ul>
<li class="jgui-menuitem">关闭当前标签</li>
<li class="jgui-menuitem">关闭其它标签</li>
<li class="jgui-menuitem">关闭左侧标签</li>
<li class="jgui-menuitem">关闭右侧标签</li>
</ul>
</div>

样式如下

.jgui-menu
{
position:absolute;
text-align: left;
font-size: 16px;
min-width: 180px;
list-style: none;
border-width: 1px;
border-color: #cccccc;
box-shadow: 0 1px 4px rgba(0,0,0,.3);
border-style: solid;
box-sizing: border-box;
}
.jgui-menu .jgui-menuitem {
padding: 10px;
padding-left: 20px;
color: #222222;
}
.jgui-menu .jgui-menuitem:hover {
background-color : #22B581;
color: white;
}

显示效果

6、右键单击时弹出这个菜单,点击任意区域关闭

<div id="menuclicktest" >4、点我弹出菜单</div>
<div class="jgui-menu" id="testmenu">
<ul>
<li class="jgui-menuitem" onclick="alert('a');">关闭当前标签</li>
<li class="jgui-menuitem">关闭其它标签</li>
<li class="jgui-menuitem">关闭左侧标签</li>
<li class="jgui-menuitem">关闭右侧标签</li>
</ul>
</div>
$('#menuclicktest').contextmenu(function ()
{
$('#testmenu').css("visibility","visible");
//$('#testmenu').slideDown();//如果用这个需要设置display:none
return false;
});
$(document).click(function()
{
$('.jgui-menu').css("visibility","hidden");
});

如此基本就完成了。这个菜单是上下文菜单,固定于某个dom元素下方显示,如果全局右键菜单,则要判断当前鼠标位置,另外屏幕左右上下显示时还要考虑不遮挡,以后再优化。

最终给Tab增加menu效果如下

演示地址:

http://www.jgui.com

JGUI源码:右键菜单实现(12)的更多相关文章

  1. JGUI源码:从头开始,建一个自己的UI框架(1)

    开篇 1.JGUI是为了逼迫自己研究底层点的前端技术而做的框架,之前对web底层实现一直没有深入研究,有了技术瓶颈,痛定思痛从头研究, 2.虽然现在vue技术比较火,但还在发展阶段,暂时先使用JQue ...

  2. JGUI源码:鼠标中键滚动再次优化(5)

    //电脑端中键滚动事件 var mousewheel = getBrowserInfo() == "Firefox" ? "DOMMouseScroll" : ...

  3. [源码解析] PyTorch 分布式(12) ----- DistributedDataParallel 之 前向传播

    [源码解析] PyTorch 分布式(12) ----- DistributedDataParallel 之 前向传播 目录 [源码解析] PyTorch 分布式(12) ----- Distribu ...

  4. JGUI源码:Accordion鼠标中键滚动和手机端滑动实现(2)

    本文是抽屉组件在PC端滚动鼠标中键.手机端滑动时,滚动数据列表实现方法,没有使用iscroll等第三方插件,支持火狐,谷歌,IE8+等浏览器. 演示在:www.jgui.com Github地址:ht ...

  5. 《python解释器源码剖析》第12章--python虚拟机中的函数机制

    12.0 序 函数是任何一门编程语言都具备的基本元素,它可以将多个动作组合起来,一个函数代表了一系列的动作.当然在调用函数时,会干什么来着.对,要在运行时栈中创建栈帧,用于函数的执行. 在python ...

  6. JGUI源码:实现图标按钮及下拉菜单(16)

    效果如下 代码片段如下 <div class="jgui-btn" id="personalbtn" style="float:right;&q ...

  7. JGUI源码:JS菜单动态绑定(8)

    我们知道Jquery绑定事件后的新添加的对象是不响应事件的,为了解决这个问题,动态添加的对象需要从新绑定,使用一个init方法实现代码如下 //Accordion封装 (function($) { J ...

  8. JGUI源码:响应式布局简单实现(13)

    首先自我检讨下,一直没有认真研究过响应式布局,有个大致概念响应式就是屏幕缩小了就自动换行或者隐藏显示,就先按自己的理解来闭门造车思考实现过程吧. 1.首先把显示区域分成12等分,bootstrap是这 ...

  9. JGUI源码:组件及函数封装方法(7)

    以Accordion为例1.在base.js定义一个对象,这样可以和JQuery对象区分开,用户使用组件时比较清晰一点,也可以在这里引用多个库. var JGUI = J = { version : ...

随机推荐

  1. VS Code常用快捷键大全

    常用 General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick O ...

  2. Visual Studio Code自定义快捷键(eclipse习惯)

    左下角设置按钮 -> Keyboard Shortcuts -> keybindings.json. [ { "key": "alt+/", &qu ...

  3. c文件操作整理

    <c陷阱与缺陷> FILE *fp; fp = fopen(file, "r+"); 编程者也许认为,程序一旦执行上述操作完毕,就可以自由地进行读取和写入的操作了.遗憾 ...

  4. mybatis批量插入报错

    报错内容 org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sq ...

  5. 云计算openstack共享组件(2)——Memcache 缓存系统

    一.缓存系统 在大型海量并发访问网站及openstack等集群中,对于关系型数据库,尤其是大型关系型数据库,如果对其进行每秒上万次的并发访问,并且每次访问都在一个有上亿条记录的数据表中查询某条记录时, ...

  6. openstack第一章:keystone

    第一篇keystone— 身份认证服务 一.Keystone介绍:       keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身 ...

  7. java事件监听机制

    1.简单的事件监听 package demo2; /* * java事件监听机制 */ import java.awt.*; import javax.swing.*; import java.awt ...

  8. springboot 与任务

    异步任务.定时任务.邮件任务 一.异步任务 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在 处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用 多线程来 ...

  9. Vue—组件传值及vuex的使用

    一.父子组件之间的传值 1.父组件向子组件传值: 子组件在props中创建一个属性,用以接收父组件传来的值 父组件中注册子组件 在子组件标签中添加子组件props中创建的属性 把需要传给子组件的值赋给 ...

  10. 美化ubuntu18.04,并安装搜狗输入法

    目录 美化Ubuntu 下载主题和图标文件 下载GNOME3 美化过程 安装输入法 下载并安装搜狗输入法 安装fcitx框架 安装过程 美化Ubuntu 下载主题和图标文件 下载地址:https:// ...