如何实现浏览器上的右键菜单


Posted in Javascript onJuly 10, 2006

 

 最近在程序员大本营中的讨论中有一位老兄提出如何在浏览器中实现类似于应用程序的鼠标右击后出现右键菜单的效果。唯鱼试了试,发现不是很难解决。现在就将源码和原理说出来和大家共享一下。哈,其实效果不是很完美啦,如果哪位大侠有更好的解决方法。可以给唯鱼yyu@enet.com.cn来信罗。 

首先要解决的问题是在怎样的情况鼠标右击不会出现IE的菜单。思路可以有两个,一个是将焦点移开,还有一个就是点在网页的什么地方不会出现右键菜单,而且会响应鼠标点击消息。(哈哈,废话一大堆。思路吗?总要多想想才有的) 

想了想, 总结出的下面几种方法
1、响应右键消息出一个ALERT框(还有点新鲜的东东没有)。 
2、响应右键消息后弹出一个新的窗口。将初始页的的焦点移开。 
可是经过试验后发现只有窗口出现在鼠标右击的位置时,才会没有浏览器的右键菜单出现。 
3、响应右键消息后弹出一个HTML的对话框。即使用showModalDialog来开启一个HTML对话框。使用这种方式可以让右键菜单不会出现。但是有一个问题是使用使用showModalDialog开启的对话框不会向使用Window.Open开启的对话框一样可以移出屏幕所在的范围。就是说始终可以看见有一个对话框出现在屏幕上。这条路也不能走了。 
4、呵呵,最后一招了,唯鱼偶尔发现在Select上进行鼠标右击或左击都不会有反应。那么如果每次鼠标都点在Select上,不就不会出现浏览器的右键菜单了。 

下面就是一个例子,感兴趣的可以把下面的拷贝成Test.html,就可以看看效果了。

< HTML> 

< title>VFish Test< /title> 

< script> 

var x, y; 

document.onmousemove=moveMouse 

document.onmousedown=click 

function moveMouse() 

Layer1.style.left = event.clientX - 2; 

Layer1.style.top = event.clientY - 2; 

function click() 

if (event.button==2) 

x = event.clientX; 

y = event.clientY; 

Layer1.style.visibility=""; 

window.setTimeout("showMenu();", 500); 

else 

HiddenPop(); 

PopMenu.style.visibility='hidden'; 

function showMenu() 

PopMenu.style.left = x- 2; 

PopMenu.style.top = y- 2; 

PopMenu.style.visibility=""; 

HiddenPop(); 

function HiddenPop() 

Layer1.style.visibility='hidden'; 

< /script> 

< BODY> 

在窗口中右击一下看看出什么:) 

< div id=Layer1 style="position:absolute; width:4px; height:4px; z-index:3; visibility: hidden"> 

< select style="width:4">< /select> 

< /div> 

< div id=PopMenu style="position:absolute; width:100px; height:100px; z-index:1; visibility: hidden"> 

< table border=2 width=100 > 

< TH align="center" color="sliver" onclick=""> 

唯鱼的菜单 

< /tH> 

< tr> 

< td> 

click it!:) 

< /td> 

< /tr> 

< /table> 

< /div> 

< /BODY> 

< /HTML>

Javascript 相关文章推荐
jQuery选择器源码解读(三):tokenize方法
Mar 31 Javascript
js实现滑动触屏事件监听的方法
May 05 Javascript
javascript实现完美拖拽效果
May 06 Javascript
js+html5实现canvas绘制简单矩形的方法
Jun 05 Javascript
JavaScript调用浏览器打印功能实例分析
Jul 17 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
Sep 19 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
Dec 30 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
Feb 22 Javascript
详解Javascript几种跨域方式总结
Feb 27 Javascript
vue loadmore 组件滑动加载更多源码解析
Jul 19 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
Aug 15 jQuery
载入进度条 效果
Jul 08 #Javascript
让广告代码不再影响你的网页加载速度
Jul 07 #Javascript
一段实时更新的时间代码
Jul 07 #Javascript
根据分辨率不同,调用不同的css文件
Jul 07 #Javascript
鼠标图片振动代码
Jul 06 #Javascript
显示、隐藏密码
Jul 01 #Javascript
让焦点自动跳转
Jul 01 #Javascript
You might like
PHP 文件上传功能实现代码
2009/06/24 PHP
php ajax 静态分页过程形式
2011/09/02 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
Python下线程之间的共享和释放示例
2015/05/04 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
Django 再谈一谈json序列化
2020/03/16 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
优秀团支部事迹材料
2014/02/08 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
文化产业实施方案
2014/06/07 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
六一儿童节开幕词
2015/01/29 职场文书
办公室禁烟通知
2015/04/23 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python
千万级用户系统SQL调优实战分享
2022/03/03 MySQL