禁用浏览器默认事件,此处是兼容写法

$(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)的更多相关文章

  1. 向上弹出菜单jQuery插件

    插件名:柯乐义英文名:Keleyijs文件名称:jquery.keleyi.js插件功能:该插件可以让你轻易地在页面上构建一个向上弹出的二级菜单. 示例查看:http://keleyi.com/kel ...

  2. html + js 右 点击 弹出 菜单

    页面 引用jar 包 <link rel="stylesheet" href="../../style/zui.min.css" type="t ...

  3. 多级弹出菜单jQuery插件ZoneMenu

    ZoneMenu是一个菜单jQuery插件,只需占用页面上的一个小区域,却可以实现多级菜单. 在线体验:http://keleyi.com/jq/zonemenu/ 点击这里下载 完整HTML文件代码 ...

  4. Mui --- 弹出菜单

    mui框架内置了弹出菜单插件,弹出菜单显示内容不限,但必须包裹在一个含.mui-popover类的div中,如下即为一个弹出菜单内容: <div id="popover" c ...

  5. JQuery实现复制数据到剪贴板之各种麻花与右键点击弹出选择菜单

    1.如果小伙伴们只是想实现点击某个按钮(通过click事件)实现复制功能. 那小哥哥我在这里推荐大家使用2个非常好用的插件 (1)clipboard.js:纯js插件,无需flash,相对来说更轻量级 ...

  6. jQuery之点击弹出图标环形菜单

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  7. 点击弹出 +1放大效果 -- jQuery插件

    20140110更新: <!doctype html> <html> <head> <meta charset="UTF-8"> & ...

  8. 基于jQuery鼠标点击弹出登陆框效果

    基于jQuery鼠标点击弹出登陆框效果.这是一款扁平样式风格的jQuery弹出层登陆框特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <input type=" ...

  9. PopupWindow-----点击弹出 PopupWindow 初始化菜单

    /** * 点击弹出 PopupWindow 初始化菜单 */ private void initPopupWindow() { PopupWindowAdapter adapter = new Po ...

随机推荐

  1. SR论文代码汇总

    1.SRCNN 页面  里面有论文,matlab和caffe代码. Tensorflow https://github.com/tegg89/SRCNN-Tensorflow 2.ESPCN 论文链接 ...

  2. Centos7 - mysql 5.5.62 tar.gz 方式安装

    安装准备 Mariadb 去除 由于CentOS7自带的是 Mariadb, 所以先来删除他吧... 1. 查找版本 # rpm -qa|grep mariadb 执行命令后会出现类似 MariaDB ...

  3. Linux命令行如何返回上一次的目录

    千辛万苦进入了一个很深层的目录,一不小心输入了cd并回车 ......... 并不是再进一次,对于bash来说,只需要很管理的一个命令: cd - 该命令等同于cd $OLDPWD,关于这一点在bas ...

  4. three.js效果之热力图和轨迹线

    1.热力图 开始的时候,是用一个网上找的canvas画渐变热点的demo,原理就是给定顶点坐标,然后画圆,颜色使用渐变色,根据权重决定渐变的层数(红色->橙色->绿色) . 但是终究觉得这 ...

  5. ARB扩展与标准OpenGL的关系

    由于OpenGL的标准更新不是很频繁,因此,当某种技术应用流行起来时,显卡厂商为了支持该技术,会使用自己的扩展来实现该功能.但是不同厂商如果有不同的实现,那么程序编写将会异常繁琐.因此多个厂商共同协商 ...

  6. jupyterlab部署到docker

    操作环境:mac OS 10.14.6 docker版本:10.03.1 终端:iterm2 3.3 时间:2019年8月 ::说明::jupyter没有提供单独的jupyterlab镜像,可以使用j ...

  7. nginx+gunicorn拓扑

    加装Nginx是否有必要 Nginx作为代理服务器,监听来自外部的80端口的请求:而Gunicorn负责监听本地机8000端口的请求.Nginx会把来自外部的请求转发给Gunicorn处理,接收到响应 ...

  8. vue 基础介绍

    0.MVVM 什么是MVVM?就是Model-View-ViewModel. ViewModel是Vue.js的核心,它是一个Vue实例. 1.基础示例 代码: <!DOCTYPE html&g ...

  9. IDEA 2019.2.2破解激活方法(激活到2089年8月,亲测有效)

    本来笔者这边是有个正版激活码可以使用的,但是,2019.9月3号的时候,一些小伙伴反映这个注册码已经失效了,于是拿着自己的 IDEA, 赶快测试了一下,果不其然,已然是不能用了. 好在,笔者又找到了新 ...

  10. kubernetes 简单 hello world nginx svc deployment

    1.nginx svc deployment [root@k8s k8s4nginx]# cat deploynginx.yaml ################################# ...