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 相关文章推荐
jquery.AutoComplete.js中文修正版(支持firefox)
Apr 09 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
JS实现下拉框的动态添加(附效果)
Apr 03 Javascript
JQuery中form验证出错信息的查看方法
Oct 08 Javascript
JQuery中clone方法复制节点
May 18 Javascript
JS实现自动变换的菜单效果代码
Sep 09 Javascript
JavaScript脚本判断蜘蛛来源的方法
Sep 22 Javascript
AngularJS动态加载模块和依赖的方法分析
Nov 08 Javascript
VueJs路由跳转——vue-router的使用详解
Jan 10 Javascript
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
Sep 28 Javascript
如何实现小程序tab栏下划线动画效果
May 18 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 mssql 数据库分页SQL语句
2008/12/16 PHP
PHP 程序授权验证开发思路
2009/07/09 PHP
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
2013/07/01 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
菜鸟javascript基础资料整理2
2010/12/06 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
python实现网站的模拟登录
2016/01/04 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
python list多级排序知识点总结
2019/10/23 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
超级实用的8个Python列表技巧
2020/08/24 Python
Python编写万花尺图案实例
2021/01/03 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
教你怎样写好自我评价
2013/10/05 职场文书
给海归自荐信的建议
2013/12/13 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
单位工作证明格式模板
2014/10/04 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL