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


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 解析Json字符串的性能比较分析代码
Dec 16 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 Javascript
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
JS倒计时代码汇总
Nov 25 Javascript
JS实现仿QQ效果的三级竖向菜单
Sep 25 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
Jul 25 Javascript
JS获取checkbox的个数简单实例
Aug 19 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
VUE2 前端实现 静态二级省市联动选择select的示例
Feb 09 Javascript
关于vue-cli3打包代码后白屏的解决方案
Sep 02 Javascript
在vue中使用eslint,配合vscode的操作
Nov 09 Javascript
vue data有值,但是页面{{}} 取不到值的解决
Nov 09 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
深入密码加salt原理的分析
2013/06/06 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
PHP四大安全策略
2014/03/12 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
asp.net和php的区别点总结
2019/10/10 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
用console.table()调试javascript
2014/09/04 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
js实现键盘自动打字效果
2016/12/23 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
Axios学习笔记之使用方法教程
2017/07/21 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
python判断完全平方数的方法
2018/11/13 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
基于python检查矩阵计算结果
2020/05/21 Python
python中取绝对值简单方法总结
2020/07/24 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
大学生的自我鉴定范文
2014/01/21 职场文书
出纳员的岗位职责
2014/02/22 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
python turtle绘图
2022/05/04 Python