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


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中focus()函数实现当对象获得焦点后自动把光标移到内容最后
Sep 29 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
May 08 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
JS+CSS3实现超炫的散列画廊特效
Jul 16 Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
Nov 24 Javascript
JS实现给对象动态添加属性的方法
Jan 05 Javascript
webpack打包node.js后端项目的方法
Mar 10 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
May 28 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
Feb 12 Javascript
vue如何实现自定义底部菜单栏
Jul 01 Javascript
基于canvas实现手写签名(vue)
May 21 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.MVC的模板标签系统(五)
2006/09/05 PHP
几种有用的变型 PHP中循环语句的用法介绍
2012/01/30 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
用javascript实现画板的代码
2007/09/05 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
vue mvvm数据响应实现
2020/11/11 Javascript
Python日志模块logging简介
2015/04/13 Python
python3.4爬虫demo
2019/01/22 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
Python多分支if语句的使用
2020/09/03 Python
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
公积金单位接收函
2014/01/11 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js