<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>网页右键菜单</title>
<!--
思路:
1.写出右键点击事件;
2.写出菜单功能;
3.关联右键功能和菜单,学习使用定位
-->
<style>
#test {
width:200px;
height:200px;
background-color:green;
} ul.context-menu {
padding:0;
margin:0;
display:none;
position:absolute; /*只能是absolute或fixed*/
} ul.context-menu li {
list-style:none;
width:100px;
height:20px;
line-height:20px;
text-align:center;
border:solid 1px;
background-color:#CCC;
display:block;
} ul.context-menu li:hover {
background-color:#C0C0C0;
cursor:context-menu;
}
</style>
<script>
//var t = document.getElementById("test");
window.onload = function(){
var clicked_ele;//全局变量,用于记录被右键单击呼出菜单的元素 //去掉默认的contextmenu事件,否则会和右键事件同时出现。
document.getElementById("test").oncontextmenu = function(e){
e.preventDefault();
}; document.getElementById("ct").oncontextmenu = function(e){
e.preventDefault();
};
document.getElementById("test").onmousedown = function(e){
if(e.button ==2){//右键
var x = e.clientX;//获取鼠标单击点的X坐标
var y = e.clientY;//获取鼠标单击点的Y坐标
//设置菜单的位置
document.getElementById("ct").style.left = x + "px";
document.getElementById("ct").style.top = y + "px";
document.getElementById("ct").style.display = "block";
clicked_ele = this;
}else if(e.button ==0){ //左键
document.getElementById("ct").style.display = "none";
}else if(e.button ==1){ //按下滚轮
document.getElementById("ct").style.display = "none";
}
}
document.getElementById("test").onblur = function(e){
document.getElementById("ct").style.display = "none";
}
//给每个菜单项添加事件处理
var items = document.getElementsByClassName("context-menu-item");
for(var i=0; i < items.length; i++){
//在定义onclick事件之前,c必须设置取消test元素的onblur事件,否则onclick事件失效,因为click先触发的是test元素的onblur事件,该事件有移除菜单的操作,才会导致后面的代码失效
items.item(i).onmouseover = function(e){
document.getElementById("test").onblur = undefined;
}
//鼠标移出菜单时,还是要将test的onblur事件还原
items.item(i).onmouseleave = function(e){
document.getElementById("test").onblur = function(e){
document.getElementById("ct").style.display = "none";
}
} items.item(i).onclick = function(e){
e.stopPropagation();//为避免引起其它错误,阻止冒泡很重要
console.log(this.innerHTML + ":" + clicked_ele.innerHTML);
document.getElementById("ct").style.display = "none";
}
}
} </script>
</head> <body>
<ul class="context-menu" id="ct">
<li class="context-menu-item">option1</li>
<li class="context-menu-item">option2</li>
<li class="context-menu-item">option3</li>
</ul> <div id="test" tabindex="2">我是美腻大方的绿方块</div>
</body>
</html>

js 右键菜单的更多相关文章

  1. Context.js 右键菜单

    ContextJS is a lightweight solution for contextual menus. Currently, there are two versions. The fir ...

  2. JS组件系列——Bootstrap右键菜单解决方案:ContextMenu

    前言:有段时间没发表随笔了,过个年人都变得懒了.新年刚来上班,今天正好得空,将去年遗留的两个小组件总结记录下.有朋友跟我说:你的bootstrap组件要能够形成一个可以满足一般项目需求的系列组件,才有 ...

  3. js屏蔽浏览器右键菜单,粘贴,复制,剪切,选中(转)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. js实现自定义右键菜单--兼容IE、Firefox、Chrome

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  5. 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单、书签等相关问题

    2015-03-02 更新文章,由于需求修改,更改了flexpaper插件,故增加第9.10.11小节,下载代码时请注意. 先废话几句.最近用到文档在线浏览功能,之前用的是print2flash(一个 ...

  6. js禁止页面复制 禁用页面右键菜单的代码

    js实现禁止页面复制功能.禁用页面右键菜单等功能.  <body oncontextmenu="return false">禁用网页右键菜单,但是仍然可以使用快捷键复制 ...

  7. js禁止默认的右键菜单或出现自定义右键菜单

    1.屏蔽默认的右键菜单 js: document.getElementById('myimg').oncontextmenu=function(){return false;} jquery: $(' ...

  8. 禁止页面复制功能 js禁止复制 禁用页面右键菜单

    <body oncontextmenu="return false">禁用网页右键菜单,但是仍然可以使用快捷键复制. js代码禁用复制功能: <script  t ...

  9. python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作

    1.参考 利用 Python + Selenium 自动化快速截图 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素) 使用python获取系统所有进程PID以及进程名 ...

随机推荐

  1. sass 基本语法

    sass语法 文件后缀名 sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号:另一种就是我们这里使用的scss文件,这种和我们平时写的css文件格式差不多,使用大括号和分号. 而本教程 ...

  2. UI:数据的解析XML与JSON

    XML  和  JSON 语言  本篇博客来自互联网参考 XML 和 JSON 的互相转化 有属性的转化为对象,无属性的转化为字符串 节点的顺序性不可逆,XML有顺序,JSON 无顺序 XML 和 J ...

  3. 1.Ext.onReady详解

    转自:https://blog.csdn.net/xufang461010923/article/details/37660139 我们知道,只有在Ext框架全部加载完后才能在客户端的代码中使用Ext ...

  4. Rails - ActiveRecord的where.not方法详解(copy)

    [说明:资料来自https://robots.thoughtbot.com/activerecords-wherenot] ActiveRecord's where.not Gabe Berke-Wi ...

  5. 我的JSP中文编码解决方案

    虽然以前就知道编码问题,但是一直没有遇到问题,以前用asp.net和php的时候,感觉很自然地写程序,没怎么特别处理编码问题,这回改用java写,真心被恶心到了. 进行了一番查阅学习后,终于搞明白了一 ...

  6. css模型

    外边距: margin:1px 2px 3px 4px; 上     右     下     左 内边距: padding:1px 2px 3px 4px; 上     右     下     左 边 ...

  7. bzoj 1565 [NOI2009]植物大战僵尸【tarjan+最大权闭合子图】

    一上来以为是裸的最大权闭合子图,上来就dinic -然后没过样例.不得不说样例还是非常良心的给了一个强连通分量,要不然就WA的生活不能自理了 然后注意到有一种特殊情况:每个植物向他保护的植物连边(包括 ...

  8. 7步教你使用git命令上传本地代码至github仓库(小白向)

    前言 1:首先你需要知道github和git分别是什么?(众所周知github是全球最大同性交友网站233333) github:国外一个免费托管代码的开源网站,每位注册用户都拥有专属的个人仓库(个人 ...

  9. sql server 改sa 密码

      ALTER LOGIN sa ENABLE ; ALTER LOGIN sa WITH PASSWORD = 'kongwenyi' ;

  10. python_os.path模块用法

    python中os.path模块用法: dirname()  用于去掉文件名,返回目录所在的路径 >>> import os >>> os.path.dirname ...