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


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 相关文章推荐
Document.location.href和.replace的区别示例介绍
Mar 04 Javascript
JavaScript的事件代理和委托实例分析
Mar 25 Javascript
浅谈jquery.fn.extend与jquery.extend区别
Jul 13 Javascript
详解Bootstrap按钮
Jan 04 Javascript
详解Javascript数据类型的转换规则
Dec 12 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
Dec 26 Javascript
利用transition实现文字上下抖动的效果
Jan 21 Javascript
JavaScript的六种继承方式(推荐)
Jun 26 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 Javascript
react.js使用webpack搭配环境的入门教程
Aug 14 Javascript
浅谈Angular4实现热加载开发旅程
Sep 08 Javascript
Angular 5.0 来了! 有这些大变化
Nov 15 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数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
如何让CI框架支持service层
2014/10/29 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
python书籍信息爬虫实例
2018/03/19 Python
深入浅析python with语句简介
2018/04/11 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
列车长先进事迹材料
2014/01/25 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
机关党员公开承诺书
2014/08/30 职场文书
个人廉政承诺书
2015/04/28 职场文书
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL