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


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 小练习(实例代码)
Aug 07 Javascript
jQuery 属性选择器element[herf*='value']使用示例
Oct 20 Javascript
防止登录页面出现在frame中js代码
Jul 22 Javascript
win7下安装配置node.js+express开发环境
Dec 06 Javascript
学习Node.js模块机制
Oct 17 Javascript
JavaScript中清空数组的方法总结
Dec 02 Javascript
js实现打地鼠小游戏
Feb 13 Javascript
angular2中使用第三方js库的实例
Feb 26 Javascript
微信小程序和百度的语音识别接口详解
May 06 Javascript
基于iview-admin实现动态路由的示例代码
Oct 02 Javascript
layui实现数据表格自定义数据项
Oct 26 Javascript
Angular value与ngValue区别详解
Nov 27 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网站地图生成类示例
2014/01/13 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
laravel入门知识点整理
2020/09/15 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
2016/01/14 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
浅谈Angular路由守卫
2017/08/26 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
2019/06/03 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
Python过滤txt文件内重复内容的方法
2018/10/21 Python
代码详解django中数据库设置
2019/01/28 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
教师批评与自我批评发言稿
2014/10/15 职场文书
期中考试复习计划
2015/01/19 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
解除租赁合同协议书
2016/03/21 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书