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


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实现无刷新DropDownList联动实现代码
Mar 08 Javascript
新发现一个骗链接的方法(js读取cookies)
Jan 11 Javascript
原生js实现shift/ctrl/alt按键的获取
Apr 08 Javascript
jCallout 轻松实现气泡提示功能
Sep 22 Javascript
jquery的ajax异步请求接收返回json数据实例
Jun 16 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
Jul 20 Javascript
JS实现跟随鼠标的链接文字提示框效果
Aug 06 Javascript
基于jquery实现表格无刷新分页
Jan 07 Javascript
javascript中this关键字详解
Dec 12 Javascript
微信小程序 页面跳转传递值几种方法详解
Jan 12 Javascript
JS简单验证上传文件类型的方法
Apr 17 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 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
最省空间的计数器
2006/10/09 PHP
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
使用Python神器对付12306变态验证码
2016/01/05 Python
详解Python中for循环是如何工作的
2017/06/30 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
几个判断型的面试题
2012/07/03 面试题
生产车间班组长岗位职责
2014/01/06 职场文书
大跃进口号
2014/06/16 职场文书
业务员管理制度范本
2015/08/06 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
Python数据分析入门之数据读取与存储
2021/05/13 Python
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python