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 ...
随机推荐
- 抓包分析IP如何设置详细步骤
首先,要知道的是,我们直接改以太网(校园网)的IP地址是不行的,校园网识别不了 如下图: 我们必须通过让电脑连接个人热点才能完成IP修改. 第一步,连接上热点后打开电脑的cmd命令程序,在命令窗口中输 ...
- spring @valid 注解
用于验证注解是否符合要求,直接加在变量之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息. @PostMapping public User create ...
- Laravel策略(Policy)示例
场景:当前用户创建的订单,只能当前用户自己看,可以通过授权策略类(Policy)来实现 1.php artisan make:policy OrderPolicy 成功后,默认只有一个构造方法.因为涉 ...
- 西安邀请赛-D(带权并查集+背包)
题目链接:https://nanti.jisuanke.com/t/39271 题意:给定n个物品,m组限制,每个物品有个伤害值,现在让两个人取完所有物品,要使得两个人取得物品伤害值之和最接近,输出伤 ...
- springdata的jpa配置文件application.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- linux 三剑客之awk总结
AWK 1.begin end使用 cat /tmp/passwd |awk -F ':' 'BEGIN {print "hello"} {print $1"\t&quo ...
- [BZOJ 3117] [NOI1999]内存分配(STL)
[BZOJ 3117] [NOI1999]内存分配(STL) 题面 内存是计算机重要的资源之一,程序运行的过程中必须对内存进行分配. 经典的内存分配过程是这样进行的: 1.内存以内存单元为基本单位,每 ...
- python基础之内置函数和匿名函数
内置函数 学习函数以后多了很多概念,例如函数的命名空间,函数的作用域,函数的调用等等,函数的作用就是为了实现某些功能而方便以后可以调用,内置函数就是这样的一些公共的函数,被称为内置函数. 我们就一 ...
- 第三篇 jQuery操作DOM
3-1 DOM页面文档 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
- 定制ListView的界面(让列表中不仅有文字还有图片fruitImage.setImageResource(fruit.getImageId());)
1.定义自己的实体类来作为ListView的适配类型如: public class Fruit { private String name;//水果的名字 private int imageId;// ...