JavaScript 对任意元素,自定义右键菜单的实现方法


Posted in Javascript onMay 08, 2013

一、一些概念:

1、鼠标事件有一个botton属性:返回一个整数,用于表示点击的是哪个鼠标按键。

BUG:在IE和标准DOM的鼠标事件中,唯一一个button属性值相同的是“单击右键”事件,都返回2。

2、事件onmousedown:表示鼠标按键按下的动作。

  事件oncontextmenu:点击鼠标触发的另一个事件。

3、中断默认事件处理函数的方法:IE中设置returnValue=false;  标准DOM中调用preventDefault()方法。

4、事件对象:①在IE中,事件对象是window对象的一个event属性。

声明:JavaScript 对任意元素,自定义右键菜单的实现方法

 

②在标准DOM中,事件对象是事件处理函数的唯一参数。

声明:JavaScript 对任意元素,自定义右键菜单的实现方法

 

解决兼容性:JavaScript 对任意元素,自定义右键菜单的实现方法

 

二、实现:

HTML:

    <p id="p1">Uncle Cat is a fat white cat !</p>
    <div id="d1">
        <a>剪切</a>
        <a>复制</a>
        <a>粘贴</a>
    </div>

javascript:
window.onload=function(){
    rightmenu('p1','d1');
}
/****
*
 封装右键菜单函数:
*

elementID   要自定义右键菜单的 元素的id
*

menuID
  要显示的右键菜单DIv的 id
*/
function rightmenu(elementID,menuID){

var menu=document.getElementById(menuID);      //获取菜单对象

var element=document.getElementById(elementID);//获取点击拥有自定义右键的 元素

element.onmousedown=function(aevent){         //设置该元素的 按下鼠标右键右键的 处理函数


if(window.event)aevent=window.event;      //解决兼容性


if(aevent.button==2){                   //当事件属性button的值为2时,表用户按下了右键



document.oncontextmenu=function(aevent){
   

if(window.event){
       

aevent=window.event;




aevent.returnValue=false;         //对IE 中断 默认点击右键事件处理函数



}else{




aevent.preventDefault();          //对标准DOM 中断 默认点击右键事件处理函数



};


};


menu.style.cssText='display:block;top:'+aevent.clientY+'px;'+'left:'+aevent.clientX+'px;'


//将菜单相对 鼠标定位


}

}

menu.onmouseout=function(){                  //设置 鼠标移出菜单时 隐藏菜单


setTimeout(function(){menu.style.display="none";},400);

}
}
Javascript 相关文章推荐
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
Nov 30 Javascript
禁止选中文字兼容IE、Chrome、FF等
Sep 04 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
Sep 10 Javascript
javascript 函数声明与函数表达式的区别介绍
Oct 05 Javascript
基于replaceChild制作简单的吞噬特效
Sep 21 Javascript
js实现C#的StringBuilder效果完整实例
Dec 22 Javascript
node.js 和HTML5开发本地桌面应用程序
Dec 13 Javascript
微信小程序 wx.uploadFile无法上传解决办法
Dec 14 Javascript
使用重写url机制实现验证码换一张功能
Aug 01 Javascript
React学习笔记之列表渲染示例详解
Aug 22 Javascript
基于JavaScript实现简单扫雷游戏
Jan 02 Javascript
JavaScript canvas实现流星特效
May 20 Javascript
深入document.write()与HTML4.01的非成对标签的详解
May 08 #Javascript
使用JavaScript 实现各种跨域的方法
May 08 #Javascript
jQuery根据纬度经度查看地图处理程序
May 08 #Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
May 08 #Javascript
JavaScript 创建运动框架的实现代码
May 08 #Javascript
jQuery输入城市查看地图使用介绍
May 08 #Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
May 08 #Javascript
You might like
THINKPHP内容分页代码分享
2015/01/14 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
javascript 一些用法小结
2009/09/11 Javascript
javascript折半查找详解
2015/01/26 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
高分子材料与工程专业推荐信
2013/12/01 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
中学生演讲稿
2014/04/26 职场文书
员工教育培训协议书
2014/09/27 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
基于docker安装zabbix的详细教程
2022/06/05 Servers