原生JS自定义鼠标右键菜单

18 篇文章 2 订阅
13 篇文章 1 订阅

效果:

在这里插入图片描述

总体思路:

为document对象绑定右键菜单事件(contextmenu),事件触发后,首先要阻止浏览器的默认行为(浏览器提供的右键菜单)出现。然后把我们自定义的菜单显示在鼠标的当前位置。

利用事件委托为菜单项绑定鼠标移入(mouseover),移出(mouseout),单击(click)事件。

具体实现过程详见代码和注释

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义鼠标右键菜单</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        #menuBox{
            border: 1px solid paleturquoise;
            display: none;
            position: absolute;
        }
        li{
            list-style: none;
            height: 30px;
            line-height: 30px;
            padding: 0 10px;
            margin: 5px 0;
        }
    </style>
</head>
<body>
    <ul id="menuBox">
        <li>全选 ctrl+A</li>
        <li>复制 ctrl+C</li>
        <li>剪切 ctrl+X</li>
        <li>粘贴 ctrl+V</li>
    </ul>
</body>
</html>
<script>
    // 获取右键菜单
    var menuBox = document.querySelector("#menuBox");
    // 获取右键菜单中的所有菜单项
    var lis = document.querySelectorAll("li");
    
    // 为文档绑定右键菜单事件
    document.oncontextmenu = function(e){
        e = e || window.event;
        // 阻止浏览器的默认行为
        if ( e && e.preventDefault ) {
            e.preventDefault();//防止浏览器默认行为(W3C) 
        } else {
           window.event.returnValue = false;//IE中阻止浏览器行为 
        }
        // 事件被触发时,显示右键菜单
        menuBox.style.display = "inline-block";
        // 位置定位在当前鼠标的位置
        menuBox.style.left = e.clientX + "px";
        menuBox.style.top = e.clientY + "px";
    }

    // 为右键菜单绑定鼠标移入事件
    menuBox.addEventListener("mouseover",function(e){
        e = e || window.event;
        if(e.target == menuBox){
            return;
        }else{
            for(var i=0; i<lis.length; i++){
                // 先将所有菜单项恢复默认背景颜色
                lis[i].style.backgroundColor = "#fff";
            }
            // 设置当前菜单项背景颜色为高亮
            e.target.style.backgroundColor = "paleturquoise";
        }
    },false);
    // 为右键菜单绑定鼠标移出事件
    menuBox.addEventListener("mouseout",function(e){
        // 将当前菜单项恢复默认背景颜色,以防下次右击时出现上次残留的背景色
        e.target.style.backgroundColor = "#fff";
    },false)

    // 为右键菜单绑定click事件
    menuBox.addEventListener("click",function(e){
        e = e || window.event;
        // 获取被单击得菜单项内容
        console.log(e.target.innerText);
        // 当某个菜单项被单击时,将右键菜单隐藏
        menuBox.style.display = "none";
    },false);

    // 为document对象绑定单击事件
    document.addEventListener("click",function(){
        // 在右键菜单之外单击时,将右键菜单隐藏
        menuBox.style.display = "none";
    },false);
</script>
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue中实现自定义鼠标右键菜单,你可以借助第三方插件或者自己编写代码来实现。下面是一个使用第三方插件 `vue-contextmenu` 的示例: 首先,安装 `vue-contextmenu` 插件: ```shell npm install vue-contextmenu ``` 然后,在你的Vue项目中,导入并注册 `vue-contextmenu` 插件: ```javascript import VueContextmenu from 'vue-contextmenu'; Vue.use(VueContextmenu); ``` 接下来,在需要添加右键菜单的元素上使用 `v-contextmenu` 指令,并绑定一个方法来定义菜单的内容和行为: ```html <template> <div> <div v-contextmenu="contextMenu"> Right-click me! </div> </div> </template> <script> export default { data() { return { contextMenu: [ { text: '菜单项1', action: 'menuItem1' }, { text: '菜单项2', action: 'menuItem2' }, { text: '菜单项3', action: 'menuItem3' } ] }; }, methods: { menuItem1() { console.log('执行菜单项1的操作'); }, menuItem2() { console.log('执行菜单项2的操作'); }, menuItem3() { console.log('执行菜单项3的操作'); } } }; </script> ``` 在这个例子中,`contextMenu` 数组定义了右键菜单的内容,每个菜单项都有一个 `text` 属性用于显示菜单项的文本,以及一个 `action` 属性用于定义菜单项被点击时要执行的方法。 运行项目后,当你在指定的元素上右键点击时,就会弹出自定义右键菜单,并执行相应的方法。 除了使用第三方插件外,你也可以根据需求自己编写代码来实现自定义鼠标右键菜单。这需要使用原生JavaScript事件来捕获右键点击事件,并自定义菜单的样式和行为。 希望对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值