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


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 研究心得 取得属性的值
Nov 30 Javascript
Javascript string 扩展库代码
Apr 09 Javascript
jquery中通过过滤器获取表单元素的实现代码
Jul 05 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
Jul 18 Javascript
JavaScript检测并限制复选框选中个数的方法
Aug 12 Javascript
js实现可折叠展开的手风琴菜单效果
Sep 07 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
Aug 19 Javascript
javascript实现文字无缝滚动
Dec 27 Javascript
JavaScript编写一个贪吃蛇游戏
Mar 09 Javascript
JS实现的碰撞检测与周期移动完整示例
Sep 02 Javascript
vue单应用在ios系统中实现微信分享功能操作
Sep 07 Javascript
JS轻量级函数式编程实现XDM三
Jun 16 Javascript
载入进度条 效果
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 CLI模式下的多进程应用分析
2013/06/03 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP中overload与override的区别
2017/02/13 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
js 函数性能比较方法
2020/08/24 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
Python操作json数据的一个简单例子
2014/04/17 Python
python采集博客中上传的QQ截图文件
2014/07/18 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
python turtle 绘制太极图的实例
2019/12/18 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
医学护理毕业生自荐信
2013/11/07 职场文书
药品质量检测应届生求职信
2013/11/14 职场文书
领导的自我鉴定
2013/12/28 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
管理失职检讨书范文
2015/05/05 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL