JS自定义右键菜单实现代码解析


Posted in Javascript onJuly 16, 2020

今天来讲一个关于右键菜单的小demo,抛砖引玉。

首先,我们要用css和html做一个自定义右键菜单。

<!--自定义右键菜单html代码-->
<div id="menu">
<div class="menu">功能1</div>
<div class="menu">功能2</div>
<div class="menu">功能3</div>
<div class="menu">功能4</div>
<div class="menu">功能5</div>
</div>

/*css代码*/
#menu{
width: 0; /*设置为0 隐藏自定义菜单*/
height: 125px;
overflow: hidden; /*隐藏溢出的元素*/
box-shadow: 0 1px 1px #888,1px 0 1px #ccc;
position: absolute; /*自定义菜单相对与body元素进行定位*/
}
.menu{
width: 130px;
height: 25px;
line-height: 25px;
padding: 0 10px;
}

现在我们已经有了自定义菜单,还需要一个很重要的事件 contextmenu。

> contextmenu :当你在页面上右键点击时,会触发此事件,并会跳出浏览器自带的右键菜单。

所以,我们要做的就是,在触发contextmenu事件时,取消掉默认行为(也就是阻止浏览器显示自带的菜单)

通过传入的事件对象,来确定鼠标的点击位置,作为left和top的值来进行元素的定位,并显示自定义菜单

window.oncontextmenu=function(e){
//取消默认的浏览器自带右键 很重要!!
e.preventDefault();

//获取我们自定义的右键菜单
var menu=document.querySelector("#menu");

//根据事件对象中鼠标点击的位置,进行定位
menu.style.left=e.clientX+'px';
menu.style.top=e.clientY+'px';

//改变自定义菜单的宽,让它显示出来
menu.style.width='125px';
}
//关闭右键菜单,很简单
window.onclick=function(e){

//用户触发click事件就可以关闭了,因为绑定在window上,按事件冒泡处理,不会影响菜单的功能

document.querySelector('#menu').style.height=0;
}

这里只是一个很简单的例子,contextmenu事件支持所有 HTML 元素,这意味者你可以给不同的元素,自定义不同的右键菜单,由于contextmenu事件会冒泡传播,子节点上触发的事件,在父节点上也会触发,所以应该调用对应的函数或者设置对应的属性值来阻止事件冒泡。

根据事件对象来定位其实很复杂也很简单,除了clientY和clientX,鼠标事件对象提供了一系列复杂的相关信息,诸如layerX,pageX等等,这些值并不直观,还存在浏览器兼容问题,不过clientX和clientY,可以说是万金油属性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
强制设为首页代码
Jun 19 Javascript
编写针对IE的JS代码两种编写方法
Jan 30 Javascript
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
Bootstrap Navbar Component实现响应式导航
Oct 08 Javascript
jQuery旋转插件jqueryrotate用法详解
Oct 13 Javascript
webpack+vue中使用别名路径引用静态图片地址
Nov 20 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
Dec 19 Javascript
canvas轨迹回放功能实现
Dec 20 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
Feb 08 Javascript
node.js部署之启动后台运行forever的方法
May 23 Javascript
vue输入框使用模糊搜索功能的实现代码
May 26 Javascript
JS如何在不同平台实现多语言方式
Jul 16 #Javascript
vue使用axios实现excel文件下载的功能
Jul 16 #Javascript
vue实现自定义多选按钮
Jul 16 #Javascript
vue实现div单选多选功能
Jul 16 #Javascript
vue+AI智能机器人回复功能实现
Jul 16 #Javascript
vue.js实现h5机器人聊天(测试版)
Jul 16 #Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
Jul 16 #Javascript
You might like
PHP中shuffle数组值随便排序函数用法
2014/11/21 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
Js base64 加密解密介绍
2013/10/11 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
python中管道用法入门实例
2015/06/04 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
python自动发送邮件脚本
2018/06/20 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
python连接mongodb密码认证实例
2018/10/16 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
Python实现快速排序的方法详解
2019/10/25 Python
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
幼儿园评语大全
2014/04/17 职场文书
党员承诺书格式
2014/05/21 职场文书
病假条格式范文
2015/08/17 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang