JavaScript 自定义html元素鼠标右键菜单功能


Posted in Javascript onDecember 02, 2019

自定义html元素鼠标右键菜单

实现思路

在触发contextmenu事件时,取消默认行为(也就是阻止浏览器显示自带的菜单),获取右键事件对象,来确定鼠标的点击位置,作为显示菜单的left和top值

编码实现

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
  window.onload = function(){
  var menu = document.getElementById('menu');
  document.body.oncontextmenu = function(e){ // 自定义body元素的鼠标事件处理函数
    var e = e || window.event;
    e.preventDefault(); //阻止系统右键菜单 IE8-不支持
    // 显示自定义的菜单调整位置
    let scrollTop =
        document.documentElement.scrollTop || document.body.scrollTop;// 获取垂直滚动条位置
    let scrollLeft =
        document.documentElement.scrollLeft || document.body.scrollLeft;// 获取水平滚动条位置
    menu.style.display = 'block';
    menu.style.left = e.clientX + scrollLeft + 'px';
    menu.style.top = e.clientY + scrollTop + 'px';
  }
  // 鼠标点击其他位置时隐藏菜单
  document.onclick = function(){
    menu.style.display = 'none';
  }
}
</script>
<style>
  *{
    margin: 0;
    padding: 0;
  }
  p{
    margin-top: 200px; 
  }
  ul li{
    list-style-type: none;
    margin: 10px 0;
    text-align: center;
  }
  #menu{
    border:1px solid #ccc;
    background: #eee;
  position: absolute; // 设置菜单为绝对位置
    width: 100px;
    height: 120px;
    display: none;
  }
</style>
</head>
<body style="overflow:auto">
  <div id="box" style="height:5000px; width:5000px">让body元素出现滚动条用的div</div>
  <div id="menu">
    <ul>
      <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >分享</a></li>
      <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >收藏</a></li>
      <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >举报</a></li>
    </ul>
  </div>
</body>
</html>

实现效果

JavaScript 自定义html元素鼠标右键菜单功能

总结

以上所述是小编给大家介绍的JavaScript 自定义html元素鼠标右键菜单功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript 全等号运算符使用说明
May 31 Javascript
js+xml生成级联下拉框代码
Jul 24 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
火狐下table中创建form导致两个table之间出现空白
Sep 02 Javascript
通过length属性判断jquery对象是否存在
Oct 18 Javascript
JavaScript验证图片类型(扩展名)的函数分享
May 05 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Sep 26 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
Mar 02 Javascript
AngularJS 中的数据源的循环输出
Oct 12 Javascript
ReactNative之FlatList的具体使用方法
Nov 29 Javascript
示例vue 的keep-alive缓存功能的实现
Dec 13 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
May 22 Javascript
VUE 动态组件的应用案例分析
Dec 02 #Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
Dec 02 #Javascript
vue 动态表单开发方法案例详解
Dec 02 #Javascript
vue 开发之路由配置方法详解
Dec 02 #Javascript
vue 开发企业微信整合案例分析
Dec 02 #Javascript
vue 使用外部JS与调用原生API操作示例
Dec 02 #Javascript
node使用mysql获取数据库数据中文乱码问题的解决
Dec 02 #Javascript
You might like
如何使用PHP中的字符串函数
2006/10/09 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
jQuery事件用法详解
2016/10/06 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
python实现flappy bird小游戏
2018/12/24 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
python super()函数的基本使用
2020/09/10 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
大四学生毕业自荐信
2013/11/07 职场文书
品牌宣传方案
2014/03/21 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫