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

时间:2022-10-10 23:08:34
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>javascript右键菜单</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<style>
.DreamMenu
{
position: absolute;
visibility: hidden;
z-index: 100;
overflow: hidden;
width: 150px;
background-color: buttonface;
border: dimgray 1px solid !important;
border: buttonhighlight menu menu buttonhighlight 2px outset;
padding: 1px !important;
padding: 1px 1px 1px 0px;
font-size: 12px;
} .DreamMenu ul
{
margin: 1px;
border-bottom: buttonhighlight 1px solid;
border-top: buttonshadow 1px solid;
} .DreamMenu a
{
display: block;
width: 100%;
padding: 1px 2px 2px 20px;
cursor: default;
text-decoration: none;
color: #000000;
} .DreamMenu a:hover
{
background: highlight;
color: #ffffff;
}
</style>
</head>
<body menu='menu'>
<!---这段js最好写进文件方便用,为了在51能运行就直接写进来了--->
<script>
/***
DreamCore - JsLib/Menu
Date : Dec 03, 2006
Copyright: DreamSoft Co.,Ltd.
Mail : Dream@Dreamsoft.Ca
Author : Egmax
Browser : IE5.0&+,Firefox1.5&+,Netscape7.0&+
Update:
***/
if (!document.all) document.captureEvents(Event.MOUSEDOWN);
var _Tmenu = 0;
var _Amenu = 0;
var _Type = 'A';
var _Menu = "null";
document.onclick = _Hidden;
function _Hidden() {
if (_Tmenu == 0) return;
document.getElementById(_Tmenu).style.visibility = 'hidden';
_Tmenu = 0;
} document.oncontextmenu = function (e) {
_Hidden();
var _Obj = document.all ? event.srcElement : e.target;
if (_Type.indexOf(_Obj.tagName) == -1) return;
_Amenu = _Obj.getAttribute('menu');
if (_Amenu == 'null') return;
if (document.all) e = event;
_ShowMenu(_Amenu, e);
return false;
}
function _ShowMenu(Eid, event) {
_Menu = document.getElementById(Eid); var _Left = event.clientX + document.body.scrollLeft;
var _Top = event.clientY + document.body.scrollTop;
_Menu.style.left = _Left.toString() + 'px';
_Menu.style.top = _Top.toString() + 'px';
_Menu.style.visibility = 'visible';
_Tmenu = Eid;
_Menu.onclick = transfer;
_Menu.oncontextmenu = no_context_menu;
} function transfer(e) {
e = e || window.event; e.cancelBubble = true;
} function no_context_menu(e) {
e = e || window.event;
e = e || window.event; e.cancelBubble = true;
return;
}
/***
可以支持其他标签INPUT,IMG
***/
</script>
<script> _Type = 'INPUT,A,DIV,BODY,IMG';</script>
<!-----设置一个菜单层---->
<div id="menu" class='DreamMenu'>
<a href='javascript:;'>您好</a> <a href='javascript:;'>我是主菜单</a> <a href='javascript:;'>
在页面上单击</a> <a href='javascript:;'>就可以看到我</a>
<ul>
</ul>
<a href='javascript:;'>打印</a>
</div>
<!-----设置一个菜单层---->
<div id="menu2" class='DreamMenu'>
<a href='javascript:;'>哈哈</a> <a href='javascript:;'>我是个链接</a> <a href='javascript:;'>
好开心啊</a> <a href='javascript:;'>查看</a>
<ul>
</ul>
<a href='javascript:;'>打印</a>
</div>
<!-----设置一个菜单层---->
<div id="menu3" class='DreamMenu'>
<a href='javascript:;'>哈哈</a> <a href='javascript:;'>我是图片</a> <a href='javascript:;'>
虽然打不开</a> <a href='javascript:;'>查看</a>
<ul>
</ul>
<a href='javascript:;'>打印</a>
</div>
<table>
<tr>
<td height="100">
<!-----设置一个菜单menu属性---->
<a href='javascript:;' menu='menu2'>菜单1</a> <a href='javascript:;' menu='menu2'>菜单2</a>
</td>
</tr>
</table>
<div style='height: 300;' menu='menu'>
</div>
<img src='qiougou.gif' menu='menu3' />
</body>
</html>

经过上面的改编:

if (!document.all) document.captureEvents(Event.MOUSEDOWN);
var _Tmenu = 0;
var _Amenu = 0;
var _Type = 'DIV';
document.onclick = _Hidden;
function _Hidden() {
if (_Tmenu || _Tmenu == null || _Tmenu == 0) return;
document.getElementById(_Tmenu).style.visibility = 'hidden';
_Tmenu = 0;
}
document.oncontextmenu = function (e) {
_Hidden();
var _Obj = document.all ? event.srcElement : e.target;
if (_Type.indexOf(_Obj.tagName) == -1) return;
_Amenu = _Obj.getAttribute('menu');
if (_Amenu || _Amenu == null || _Amenu == 'null') return;
if (document.all) e = event;
_ShowMenu(_Amenu, e);
return false;
}
function _ShowMenu(Eid, event, type) {
var _Menu = document.getElementById(Eid);
var _Left = event.clientX + document.body.scrollLeft;
var _Top = event.clientY + document.body.scrollTop;
var _menuOffsetHeight = parseInt(_Menu.offsetHeight);
if (parseInt(document.body.clientHeight) - parseInt(_Top) < _menuOffsetHeight) {//
_Top = _Top - _menuOffsetHeight;
_Menu.style.left = _Left.toString() + 'px';
_Menu.style.top = _Top.toString() + 'px';
_Menu.style.visibility = 'visible';
_Tmenu = Eid; }
else {
_Menu.style.left = _Left.toString() + 'px';
_Menu.style.top = _Top.toString() + 'px';
_Menu.style.visibility = 'visible';
_Tmenu = Eid;
}
}

js实现自定义右键菜单--兼容IE、Firefox、Chrome的更多相关文章

  1. js之自定义右键菜单

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. JS简单实现自定义右键菜单

    RT,一个简单的例子,仅仅讲述原理 <div id="menu" style="width: 0;height: 0;background: cadetblue;p ...

  3. js进阶 12-18 jquery如何实现自定义右键菜单(把问题分细)

    js进阶 12-18  jquery如何实现自定义右键菜单(把问题分细) 一.总结 一句话总结:用鼠标右键事件contextmenu,阻止系统默认事件,让做好的右键菜单显示出来,并且显示在我们出现的位 ...

  4. html鼠标自定义右键菜单:css&plus;js实现自定义html右键菜单

    我们在网页中很多都有右键菜单的功能,一般点击右键显示的是浏览器默认的菜单选项,那么我们直接如何通过css+js实现html的右键菜单呢?这篇文章将讲解html鼠标自定义右键菜单的实现原理和实现代码. ...

  5. JS学习笔记 - 自定义右键菜单、文本框只能输入数字

    <script> // 事件总共有2个部分, //1.点击鼠标右键的表现 oncontextmenu 2.点击鼠标左键的表现(即普通点击onclick) // 点击右键,div位置定位到鼠 ...

  6. ASP&period;NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  7. 自定义右键菜单,禁用浏览器自带的右键菜单&lbrack;右键菜单实现--Demo&rsqb;

    许多从事Web开发的会发现有些事,我们需要禁用浏览器本事自带的右键菜单,而实现自定义的右键菜单下面我们也来实现一个自定义的右键菜单 首先来创建JSP页面 <%@ page language=&q ...

  8. jquery 自定义右键菜单

    如果要自定义右键菜单,那么就需要禁止原本的右键菜单,代码如下 document.oncontextmenu = new Function("return false;");//禁止 ...

  9. js屏蔽浏览器右键菜单&comma;粘贴&comma;复制&comma;剪切&comma;选中(转)

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

随机推荐

  1. sqoop与mysql之间中文乱码

    sudo -u hive sqoop export --connect "jdbc:mysql://192.168.22.201/LauncherDB?useUnicode=true&amp ...

  2. &lbrack;Flex&rsqb; Accordion系列 - Header背景图的设置

    <?xml version="1.0" encoding="utf-8"?> <!--Flex中如何通过getHeaderAt()函数以及se ...

  3. 纯css实现三角形

    在设计界面的时候,通常需要三角形的图标,一般做法是用图片,其实也可以使用css来实现.如下: 向上的三角形   向右的三角形   向下的三角形   向左的三角形   实现它们的css分别是: .top ...

  4. Android 轮询之 Service &plus; AlarmManager&plus;Thread (转)

    android中涉及到将服务器中数据变化信息通知用户一般有两种办法,推送和轮询. 消息推送是服务端主动发消息给客户端,因为第一时间知道数据发生变化的是服务器自己,所以推送的优势是实时性高.但服务器主动 ...

  5. FineUI Grid 缓存列显示隐藏状态

    当列表字段过多时,需要隐藏掉一些,但是再次打开页面又显示出来了,FineUI没有提供缓存功能,那么自己动手,打开[ext-part2.js]找到 “if (Ext.grid.column.RowNum ...

  6. rsync 断点续传

    # rsync -avzP file root@172.20.7.219:/root/tmp           (我这里file指要传送的文件)

  7. 关于 ThinkPHP 在 Nginx 服务器上 使用U方法跳转问题

    这个问题已多次遇到,关于tp 框架 使用U 方法跳转, 在Nginx 服务器上可能会遇到路由跳转不过去前面带点(如:./xx) 解决这个问题,可以在tp的入口文件 index.php 里定义个常量 d ...

  8. python实现线性排序-基数排序

    基数排序算法是一种是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较. 由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于 ...

  9. Oracle 服务器结构

    [学习目标] 作为一个数据库管理员(DBA),经常会遇到各种没有见过的问题.除了宝贵的经验外, 通过理论基础去对问题进行判断.解决是至关重要的.因此,Oracle 服务器的结构和组成 是学习Oracl ...

  10. eslint规则记录

    "off"或者0 //关闭规则关闭 "warn"或者1 //在打开的规则作为警告(不影响退出代码) "error"或者2 //把规则作为一个 ...