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


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 相关文章推荐
JS对URL字符串进行编码/解码分析
Oct 25 Javascript
javascript web对话框与弹出窗口
Feb 22 Javascript
jquery下onpropertychange事件的绑定方法
Aug 01 Javascript
js实现登陆遮罩效果的方法
Jul 28 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
Nov 30 Javascript
bootstrap模态框远程示例代码分享
May 22 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
Aug 14 Javascript
vue-cli项目无法用本机IP访问的解决方法
Sep 20 Javascript
JavaScript遍历DOM元素的常见方式示例
Feb 16 Javascript
Vue.js中的组件系统
May 30 Javascript
微信小程序基础教程之echart的使用
Jun 01 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安全性漫谈
2012/06/28 PHP
PHP中数组的分组排序实例
2014/06/01 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
2016/06/13 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
2017/07/04 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
JavaScript中URL编码函数代码
2011/01/11 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
详解jQuery中的事件
2016/12/14 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
Python 数据结构之堆栈实例代码
2017/01/22 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
Python连接Impala实现步骤解析
2020/08/04 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
C++:局部变量能否和全局变量重名
2014/03/03 面试题
实习教师自我鉴定
2013/09/27 职场文书
实习自荐信
2013/10/13 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
社区母亲节活动方案
2014/03/05 职场文书
入党介绍人评语
2014/05/06 职场文书
毕业典礼邀请函
2015/01/31 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书
社区结对共建协议书
2016/03/23 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server