鼠标右键点击弹出菜单(jQuery)
禁用浏览器默认事件,此处是兼容写法
$(document).contextmenu(function (e) {
  var event = e || window.event;
  if (event.preventDefault) {
    event.preventDefault(); // 防止浏览器默认行为(W3C)
  } else {
    event.returnValue = false; // IE中阻止浏览器行为
  }
});
封装右键函数rightClickMouse(),也可将禁用默认浏览器事件封装到此函数中,由于我的项目中如果没有先选中列表项,就不会调用右键函数,因此首先全局禁用浏览器默认事件了~
function rightClickMouse(obj, callback) {//给选择器obj绑定右键事件
  $(document).on( 'mousedown',obj,function (e) { 
   var $t = $(this); 
   if (e.which == 3) { 
       if (typeof callback == 'function') { 
  callback($t); 
        } 
    } 
  }); 
}
右键菜单默认隐藏,相对于body绝对定位(absolute),z-index值尽量大,使其位于界面最上层,通过获取鼠标点击的位置来对菜单进行定位;
注意HTML中右键菜单的位置是body标签的子元素;
从后台获取列表数据并以无序列表显示,然后给li绑定点击事件。
此处有个坑:由于li是动态添加的节点,因此直接使用$('#itemList>li').click()是无效的!!!
//给点击的li标签绑定click事件,则只有选中相机列表时才可弹出右键菜单
 $('#itemList').on('click', 'li', function () {
       rightClickMouse('#cameraList>li', function () {
          $(document).contextmenu(function (e) {
            // 获取窗口尺寸
            var winWidth = $(document).width();
            var winHeight = $(document).height();
            // 鼠标点击位置坐标
            var mouseX = e.pageX;
            var mouseY = e.pageY;
            // ul标签的宽高
            var menuWidth = $(".contextmenu").width();
            var menuHeight = $(".contextmenu").height();
            // 最小边缘margin(具体窗口边缘最小的距离)
            var minEdgeMargin = 10;
            // 以下判断用于检测ul标签出现的地方是否超出窗口范围
            // 第一种情况:右下角超出窗口
            if (mouseX + menuWidth + minEdgeMargin >= winWidth &&
              mouseY + menuHeight + minEdgeMargin >= winHeight) {
              menuLeft = mouseX - menuWidth - minEdgeMargin + "px";
              menuTop = mouseY - menuHeight - minEdgeMargin + "px";
            }
            // 第二种情况:右边超出窗口
            else if (mouseX + menuWidth + minEdgeMargin >= winWidth) {
              menuLeft = mouseX - menuWidth - minEdgeMargin + "px";
              menuTop = mouseY + minEdgeMargin + "px";
            }
            // 第三种情况:下边超出窗口
            else if (mouseY + menuHeight + minEdgeMargin >= winHeight) {
              menuLeft = mouseX + minEdgeMargin + "px";
              menuTop = mouseY - menuHeight - minEdgeMargin + "px";
            }
            // 其他情况:未超出窗口
            else {
              menuLeft = mouseX + minEdgeMargin + "px";
              menuTop = mouseY + minEdgeMargin + "px";
            };
            // ul菜单出现
            $(".contextmenu").css({
              "left": menuLeft,
              "top": menuTop
            }).show();
          });
          // 点击页面任意地方之后,右键菜单隐藏
          $(document).click(function () {
            $(".contextmenu").hide();
          });
        });
});
鼠标右键点击弹出菜单(jQuery)的更多相关文章
- 向上弹出菜单jQuery插件
		
插件名:柯乐义英文名:Keleyijs文件名称:jquery.keleyi.js插件功能:该插件可以让你轻易地在页面上构建一个向上弹出的二级菜单. 示例查看:http://keleyi.com/kel ...
 - html + js 右 点击  弹出 菜单
		
页面 引用jar 包 <link rel="stylesheet" href="../../style/zui.min.css" type="t ...
 - 多级弹出菜单jQuery插件ZoneMenu
		
ZoneMenu是一个菜单jQuery插件,只需占用页面上的一个小区域,却可以实现多级菜单. 在线体验:http://keleyi.com/jq/zonemenu/ 点击这里下载 完整HTML文件代码 ...
 - Mui --- 弹出菜单
		
mui框架内置了弹出菜单插件,弹出菜单显示内容不限,但必须包裹在一个含.mui-popover类的div中,如下即为一个弹出菜单内容: <div id="popover" c ...
 - JQuery实现复制数据到剪贴板之各种麻花与右键点击弹出选择菜单
		
1.如果小伙伴们只是想实现点击某个按钮(通过click事件)实现复制功能. 那小哥哥我在这里推荐大家使用2个非常好用的插件 (1)clipboard.js:纯js插件,无需flash,相对来说更轻量级 ...
 - jQuery之点击弹出图标环形菜单
		
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...
 - 点击弹出 +1放大效果 -- jQuery插件
		
20140110更新: <!doctype html> <html> <head> <meta charset="UTF-8"> & ...
 - 基于jQuery鼠标点击弹出登陆框效果
		
基于jQuery鼠标点击弹出登陆框效果.这是一款扁平样式风格的jQuery弹出层登陆框特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <input type=" ...
 - PopupWindow-----点击弹出 PopupWindow  初始化菜单
		
/** * 点击弹出 PopupWindow 初始化菜单 */ private void initPopupWindow() { PopupWindowAdapter adapter = new Po ...
 
随机推荐
- 使用pyinstaller 打包python程序
			
1.打开PyCharm的Terminal,使用命令pip install pyinstaller安装pyinstaller 2.打包命令:pyinstaller --console --onefile ...
 - 怎么彻底关闭卸载删除Cortana小娜进程,最简单
			
原文地址:https://jingyan.baidu.com/article/90bc8fc8be67bcf653640cfa.html Win10中的Cortana是微软开发的一款个人AI助理,集聊 ...
 - Python的并行求和例子
			
先上一个例子,这段代码是为了评估一个预测模型写的,详细评价说明在 https://www.kaggle.com/c/how-much-did-it-rain/details/evaluation, 它 ...
 - 008-ICMP协议(网络控制文协议)
			
一.概述 ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议簇的一个子协议,用于在IP主机.路由器之间传递控制消息.控制 ...
 - 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类
			
笔记 6.Mysql逆向工程效率神器之使用IDE自动生成Java实体类 简介:实战使用IDE根据Mysql自动生成java pojo实体类 1.IDEA连接数 ...
 - WampServer  下载以及安装问题 以及配置远程连接MYSQL
			
WampServer 3.0 下载: http://dl.pconline.com.cn/download/52877-1.html 碰到的问题DDL无法添加,解决方法:MSVCR110.DLL fo ...
 - LINUX 的网站压力测试工具 webbench
			
网站压力测试工具-Webbench webbench简介: Webbench是有名的网站压力测试工具,它是由 Lionbridge公司(http://www.lionbridge.com ...
 - 3分钟Markdown快速入门与使用
			
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 注意:图片为效果图 1 标题 #开头代表标题,几个#号代表几级,最高支持六级标题 ...
 - mariadb第一章
			
1.什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据库里的数 ...
 - Linux服务知识点总结
			
一.firewalld防火墙 1.firewalld简述 firewalld:防火墙,其实就是一个隔离工具:工作于主机或者网络的边缘.对于进出本主机或者网络的报文根据事先定义好的网络规则做匹配检测,对 ...