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 相关文章推荐
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
网站页面自动跳转实现方法PHP、JSP(下)
Aug 01 Javascript
使用JavaScript构建JSON格式字符串实现步骤
Mar 22 Javascript
Node.js实现批量去除BOM文件头
Dec 20 Javascript
js预加载图片方法汇总
Jun 15 Javascript
用jQuery实现圆点图片轮播效果
Mar 19 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
Sep 13 Javascript
vue中如何让子组件修改父组件数据
Jun 14 Javascript
详解ESLint在Vue中的使用小结
Oct 15 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
Jan 18 Javascript
js打开word文档预览操作示例【不是下载】
May 23 Javascript
利用layer实现表单完美验证的方法
Sep 26 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
推荐一篇入门级的Class文章
2007/03/19 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
php 定义404页面的实现代码
2012/11/19 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
layui实现三级联动效果
2019/07/26 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
Python中django学习心得
2017/12/06 Python
Python简单基础小程序的实例代码
2019/04/28 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
python中time、datetime模块的使用
2020/12/14 Python
小狗电器官方商城:中国高端吸尘器品牌
2017/03/29 全球购物
工程项目经理岗位职责
2013/12/15 职场文书
毕业生的自我评价分享
2013/12/18 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL