首页   >   代码编程   >   WEB前端

JS禁止页面右键菜单,并且自定义鼠标右键菜单

在一些场景下,我们并不希望用户点击右键菜单来审查元素,或者说我们想在右键菜单中添加一些我们自己的功能,但是却没有直接的API,那我们就换一种思路,直接禁止浏览器的原生右键鼠标菜单,然后自己重新写一个右键弹出菜单。

如下图所示:

JS禁止页面右键菜单,并且自定义鼠标右键菜单

实现代码:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>JS禁止页面右键菜单,并且自定义鼠标右键菜单</title>
    <style type="text/css">
        #item-list {
            width: 0; /*设置为0 隐藏自定义菜单*/
            height: 125px;
            overflow: hidden; /*隐藏溢出的元素*/
            box-shadow: 0 1px 1px #888, 1px 0 1px #ccc;
            position: absolute; /*自定义菜单相对与body元素进行定位*/
        }

        .item {
            width: 130px;
            height: 25px;
            line-height: 25px;
            padding: 0 10px;
        }
    </style>
</head>
<body>
<!--自定义右键菜单html代码-->
<div id="item-list">
    <div class="item">功能1</div>
    <div class="item">功能2</div>
    <div class="item">功能3</div>
    <div class="item">功能4</div>
    <div class="item">功能5</div>
</div>
<script type="text/javascript">
    // 根据鼠标点击,计算右键菜单展示的坐标
    window.oncontextmenu = function (e) {
        //取消默认的浏览器自带右键 很重要!!
        e.preventDefault();

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

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

        //改变自定义菜单的宽,让它显示出来
        menu.style.width = '125px';
    }

    //关闭右键菜单,很简单
    window.onclick = function () {
        //用户触发click事件就可以关闭了,因为绑定在window上,按事件冒泡处理,不会影响菜单的功能
        document.querySelector('#item-list').style.height = 0;
    }
</script>
</body>
</html>

代码很简单,核心思路就两点:

1、通过鼠标点击的坐标,动态计算右键菜单的位置;

2、点击右键菜单之外的地方,关闭右键菜单;

QQ群: 686430774  /  718410762

站长Q: 1347384268

如果文章有帮到你,可以考虑请博主喝杯咖啡!

分享到:

欢迎分享本文,转载请注明出处!

作者:不忘初心

发布时间:2019-06-20

永久地址:https://www.jiweichengzhu.com/article/38c262da140745f697821cbe08aa9593

评论