jquery 自定义右键菜单
如果要自定义右键菜单,那么就需要禁止原本的右键菜单,代码如下
document.oncontextmenu = new Function("return false;");//禁止右键默认菜单
该自定义右键菜单是基于jquery上的
html+css:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title> <style>
*{ margin:0; padding:0; }
#js-right-menu{ background-color:#fff; z-index:9999; }
#js-right-menu a{ color:#333; display:block; text-decoration:none; font-size:14px; height:25px; line-height:25px; border:1px solid #fff; padding:0 10px; }
#js-right-menu a:hover{ background-color:#eee; border-color:#ddd; }
.mydiv1{ background:#f8f8f8; width:200px; height:300px; }
.mydiv2{ background:#ddd; width:200px; height:100px; }
</style>
</head>
<body>
<div id="mydiv" style="border:1px solid #ddd; height:400px; width:400px;">
<div class="mydiv1"></div>
<div class="mydiv2"></div>
</div> <script src="js/jquery-1.8.2.min.js"></script>
<script src="js/rightMenu.js"></script>
<script>
$(function(){
$("#mydiv").rightMenu({_width:"200px",fun:["deleteDom","nextDom","prevDom"]});//有三个默认的菜单
$(".mydiv1").rightMenu({_width:"200px",menu:["删除"],fun:["deleteDom"]});//只有删除菜单
$(".mydiv2").rightMenu({_width:"200px",menu:[],fun:[]});//没有右键菜单
});
</script>
</body>
</html>
rightMenu.js:
function deleteDom(){
event.stopPropagation();
alert("删除");
rightMenu.removeDom();
}
function nextDom(){
event.stopPropagation();
alert("下一个");
rightMenu.removeDom();
}
function prevDom(){
event.stopPropagation();
alert("上一个");
rightMenu.removeDom();
}
function rightMenu(opt){//右键菜单
this.cfg = $.extend({
_width:"400px",
menu: ["删除","下一个","上一个"],
fun: ["","function(){}","function(){}"]
},opt || {});
}
rightMenu.removeDom = function(){//移除菜单
var menuDom = document.getElementById("js-right-menu");
menuDom ? document.body.removeChild(menuDom) : "";
}
rightMenu.stopPropagationFun = function(e){//阻止冒泡事件
if(e && e.stopPropagation){
e.stopPropagation();
}else{ //if IE
window.event.cancelBubble = true;
}
}
rightMenu.prototype.creatDom = function(e){//创建节点
var dom = document.createElement("div");
var str = "";
var pageX = e.clientX;
var pageY = e.clientY;
var screenW = $(window).width();
var screenH = $(window).height();
var lft = (pageX+parseInt(this.cfg._width))>screenW ? ((pageX-parseInt(this.cfg._width))<?pageX:(pageX-parseInt(this.cfg._width)))+"px" : pageX+"px";
var top = 0;
var domH = 0;
//设置样式
dom.setAttribute("id","js-right-menu");
dom.style.cssText = 'width:'+(parseInt(this.cfg._width)-6)+'px;position:absolute;top:'+pageY+'px;left:'+lft+';height:auto;border:1px solid #ddd;padding:2px;';
for(var i=0; i<this.cfg.menu.length; i++){
str += '<p><a href="javascript:;" id="js-alertMenu'+i+'" onmousedown="'+this.cfg.fun[i]+'()">'+this.cfg.menu[i]+'</a></p>';
}
dom.innerHTML = str;
document.body.appendChild(dom);
domH = $(dom).outerHeight();
top = (pageY+domH)>screenH ? (pageY-domH)+"px" : pageY+"px";
dom.style.top = top;
}
rightMenu.prototype.mouseEvent = function(e){//鼠标事件
rightMenu.stopPropagationFun(e);//阻止冒泡事件
document.oncontextmenu = new Function("return false;");//禁止右键默认菜单
var tagDom = $(e.target);
if(tagDom.hasClass("js-right-menu") || tagDom.parents(".js-right-menu").length){
return false;
}
rightMenu.removeDom();
if(e.button === 2 && (this.cfg.menu.length === this.cfg.fun.length) && this.cfg.menu.length){
this.creatDom(e);
}
}
;(function($){
$.fn.rightMenu = function(opt){
var self = $(this);
document.onmousedown = function(e){
rightMenu.removeDom();//删除节点
}
self.mousedown(function(e){
rightMenu.stopPropagationFun(e);//阻止冒泡事件
var menuEvent = new rightMenu(opt);
menuEvent.mouseEvent(e);
});
}
})(jQuery);
如果不需要有右键菜单,只需给$(".mydiv2").rightMenu({_width:"200px",menu:[],fun:[]});中的menu或fun设置为空数组即可
jquery 自定义右键菜单的更多相关文章
- jQuery自定义右键菜单
首先看下效果,效果在最下面: 代码: body { font-size: 12px; margin: 0px; padding: 0px; } form,div,ul,li { margin: 0px ...
- js进阶 12-18 jquery如何实现自定义右键菜单(把问题分细)
js进阶 12-18 jquery如何实现自定义右键菜单(把问题分细) 一.总结 一句话总结:用鼠标右键事件contextmenu,阻止系统默认事件,让做好的右键菜单显示出来,并且显示在我们出现的位 ...
- 自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]
许多从事Web开发的会发现有些事,我们需要禁用浏览器本事自带的右键菜单,而实现自定义的右键菜单下面我们也来实现一个自定义的右键菜单 首先来创建JSP页面 <%@ page language=&q ...
- ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单
前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...
- JavaScript自定义右键菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS简单实现自定义右键菜单
RT,一个简单的例子,仅仅讲述原理 <div id="menu" style="width: 0;height: 0;background: cadetblue;p ...
- antd Tree组件中,自定义右键菜单
最近项目中,有一个需求是自定义antd的Tree组件的右键菜单功能. 直接上代码 class Demo extends Component { state = { rightClickNodeTree ...
- AS3.0 自定义右键菜单类
AS3.0 自定义右键菜单类: /** * 自定义右键菜单类 * 自定义菜单项不得超过15个,每个标题必须至少包含一个可见字符. * 标题字符不能超过100个,并且开头的空白字符会被忽略. * 与任何 ...
- js之自定义右键菜单
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 【0.1】mysql版本升级(5.6升级到5.7)
目录 [1].升级操作 [2].mysql 5.6安装(二进制) [3].mysql 5.7安装(二进制) [1].升级操作 核心步骤 [1.1]停止mysql 5.6 [1.2]把环境变量引用到My ...
- 卸载mysql后再安装提示The service already exists!问题解决方法
卸载mysql后再安装输入mysqld --install 回车后提示The service already exists! 原因:卸载的时候没有卸载干净 方法: 一.重新以管理员身份打开cmd 二. ...
- MyBatis动态SQL第一篇之实现多条件查询(if、where、trim标签)
一.动态SQL概述 以前在使用JDBC操作数据时,如果查询条件特别多,将条件串联成SQL字符串是一件痛苦的事情.通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字 ...
- 小白学习django第四站-关联数据库
使用mysql连接django首先要配置好相关环境 首先在setting.py配置数据库信息(需要现在mysql中创建一个数据库) 在setting.py那个目录的__init__.py文件中写入 之 ...
- Restful Api调用工具类
RestfulHttpClient.java package pres.lnk.utils; import com.fasterxml.jackson.databind.ObjectMapper; i ...
- Python验证码登录(Tesseract安装配置)
1.安装py库:pytesseract,PIL pip install pytesseract pip install PILLOW 如果安装时,出现权限不足: pip install --user ...
- Ansible 系统概述与部署
Ansible 系统概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet但是有一个不同和优点是我们不需要在节点中安装 ...
- GoAccess安装
编译安装 yum install geoip-devel openssl-devel libmaxminddb-devel ncurses-devel bzip2-devel tokyocabinet ...
- JavaSE--异常机制
异常就是程序在运行时出现的不正常情况.发生在运行时期,java程序在运行时期发生的不正常情况,此时java就按照面向对象的思想对不正常现象进行描述和对象的封装.异常的由来:问题也是现实生活中一个具体的 ...
- python词云生成-wordcloud库
python词云生成-wordcloud库 全文转载于'https://www.cnblogs.com/nickchen121/p/11208274.html#autoid-0-0-0' 一.word ...