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


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 相关文章推荐
javascript引用类型指针的工作方式
Apr 13 Javascript
JavaScript使用Replace进行字符串替换的方法
Apr 14 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
Sep 17 Javascript
学习JavaScript设计模式(链式调用)
Nov 26 Javascript
浅谈Javascript中的函数、this以及原型
Oct 09 Javascript
基于angular2 的 http服务封装的实例代码
Jun 29 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 Javascript
vue-cli构建项目使用 less的方法
Oct 04 Javascript
Vue实现todolist删除功能
Jun 26 Javascript
js运算符的一些特殊用法
Jul 29 Javascript
vue2 拖动排序 vuedraggable组件的实现
Aug 08 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
载入进度条 效果
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
PHP4.04简明安装
2006/10/09 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
php类自动加载器实现方法
2015/07/28 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
php微信公众号开发之简答题
2018/10/20 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
RequireJs的使用详解
2017/02/19 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
python 迭代器和iter()函数详解及实例
2017/03/21 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
Python截图并保存的具体实例
2021/01/14 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
商务主管岗位职责
2013/12/08 职场文书
高三生物教学反思
2014/01/25 职场文书
假面舞会策划方案
2014/05/29 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
出国签证在职证明范本
2014/11/24 职场文书
青年教师听课心得体会
2016/01/15 职场文书
Python实现批量自动整理文件
2022/03/16 Python