• HTML中自定义鼠标右键菜单


    今天突然有人跟我提到了HTML中如何自定义鼠标右键菜单,这里大概记录一下吧,方便下次直接复制。免得还去看API文档

    HTML中自定义鼠标右键菜单

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>鼠标右键菜单示例title>
        <style>
            .context-menu {
                display: none;
                position: absolute;
                background-color: #fff;
                border: 1px solid #ccc;
                min-width: 100px;
                box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
                z-index: 999;
            }
            .context-menu-item {
                padding: 5px 10px;
                cursor: pointer;
            }
        style>
    head>
    <body>
    
    <div id="contextMenu" class="context-menu">
        <div class="context-menu-item" onclick="handleItemClick('复制')">复制div>
        <div class="context-menu-item" onclick="handleItemClick('粘贴')">粘贴div>
        <div class="context-menu-item" onclick="handleItemClick('剪切')">剪切div>
    div>
    
    <script>
        document.addEventListener('contextmenu', function (e) {
            e.preventDefault(); // 阻止默认右键菜单
    
            var menu = document.getElementById('contextMenu');
            menu.style.display = 'block';
            menu.style.left = `${e.pageX}px`;
            menu.style.top = `${e.pageY}px`;
        });
    
        document.addEventListener('click', function () {
            document.getElementById('contextMenu').style.display = 'none'; // 点击页面其他地方隐藏菜单
        });
    
        function handleItemClick(itemName) {
            console.log(`用户点击了菜单项:${itemName}`);
            // 在此处添加实际的业务逻辑,如执行复制、粘贴或剪切操作
            switch (itemName) {
                case '复制':
                    // 执行复制操作...
                    break;
                case '粘贴':
                    // 执行粘贴操作...
                    break;
                case '剪切':
                    // 执行剪切操作...
                    break;
            }
            document.getElementById('contextMenu').style.display = 'none'; // 点击菜单项后隐藏菜单
        }
    script>
    
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    结果如下所示

    在这里插入图片描述
    在这个例子中,当用户在网页上右键点击时,会显示一个自定义菜单。并在点击菜单项时执行相应的函数。这个就要根据自己具体的实际场景中实现了。

    可以稍微改一下鼠标悬浮到右键菜单时的样式

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>鼠标右键菜单示例title>
        <style>
            .context-menu {
                display: none;
                position: absolute;
                background-color: #fff;
                border: 1px solid #ccc;
                min-width: 100px;
                box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
                z-index: 999;
            }
            .context-menu-item {
                padding: 5px 10px;
                cursor: pointer;
            }
            .context-menu-item:hover {
                background-color: #e6f7ff;
            }
        style>
    head>
    <body>
    
    <div id="contextMenu" class="context-menu">
        <div class="context-menu-item" onclick="handleItemClick('复制')">复制div>
        <div class="context-menu-item" onclick="handleItemClick('粘贴')">粘贴div>
        <div class="context-menu-item" onclick="handleItemClick('剪切')">剪切div>
    div>
    
    <script>
        document.addEventListener('contextmenu', function (e) {
            e.preventDefault(); // 阻止默认右键菜单
    
            var menu = document.getElementById('contextMenu');
            menu.style.display = 'block';
            menu.style.left = `${e.pageX}px`;
            menu.style.top = `${e.pageY}px`;
        });
    
        document.addEventListener('click', function () {
            document.getElementById('contextMenu').style.display = 'none'; // 点击页面其他地方隐藏菜单
        });
    
        function handleItemClick(itemName) {
            console.log(`用户点击了菜单项:${itemName}`);
            // 在此处添加实际的业务逻辑,如执行复制、粘贴或剪切操作
            switch (itemName) {
                case '复制':
                    // 执行复制操作...
                    break;
                case '粘贴':
                    // 执行粘贴操作...
                    break;
                case '剪切':
                    // 执行剪切操作...
                    break;
            }
            document.getElementById('contextMenu').style.display = 'none'; // 点击菜单项后隐藏菜单
        }
    script>
    
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    结果如下所示

    在这里插入图片描述

    只在某个特定的div才可以显示右键菜单

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>鼠标右键菜单示例title>
        <style>
            .context-menu {
                display: none;
                position: absolute;
                background-color: #fff;
                border: 1px solid #ccc;
                min-width: 100px;
                box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
                z-index: 999;
            }
            .context-menu-item {
                padding: 5px 10px;
                cursor: pointer;
            }
            .context-menu-item:hover {
                background-color: #f5f5f5;
            }
        style>
    head>
    <body>
    
    <div id="targetDiv" style="width: 300px; height: 300px; background-color: #eee;">
        右键点击我显示自定义菜单
    div>
    
    <div id="contextMenu" class="context-menu">
        <div class="context-menu-item" onclick="handleItemClick('复制')">复制div>
        <div class="context-menu-item" onclick="handleItemClick('粘贴')">粘贴div>
        <div class="context-menu-item" onclick="handleItemClick('剪切')">剪切div>
    div>
    
    <script>
        const targetDiv = document.getElementById('targetDiv');
    
        targetDiv.addEventListener('contextmenu', function (e) {
            e.preventDefault(); // 阻止默认右键菜单
    
            if (e.target === targetDiv) { // 只有当点击的目标是目标div时才显示菜单
                var menu = document.getElementById('contextMenu');
                menu.style.display = 'block';
                menu.style.left = `${e.pageX}px`;
                menu.style.top = `${e.pageY}px`;
            }
        });
    
        document.addEventListener('click', function () {
            document.getElementById('contextMenu').style.display = 'none'; // 点击页面其他地方隐藏菜单
        });
    
        function handleItemClick(itemName) {
            console.log(`用户点击了菜单项:${itemName}`);
            // 在此处添加实际的业务逻辑,如执行复制、粘贴或剪切操作
            switch (itemName) {
                case '复制':
                    // 执行复制操作...
                    break;
                case '粘贴':
                    // 执行粘贴操作...
                    break;
                case '剪切':
                    // 执行剪切操作...
                    break;
            }
            document.getElementById('contextMenu').style.display = 'none'; // 点击菜单项后隐藏菜单
        }
    script>
    
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    结果如下所示

    在这里插入图片描述
    在这个例子中,右键菜单只会出现在具有ID为targetDiv的div元素上。当用户在其他位置右键点击时,不会显示自定义菜单。

    在多个特定的div中都可以显示右键菜单

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>鼠标右键菜单示例title>
        <style>
            .context-menu {
                display: none;
                position: absolute;
                background-color: #fff;
                border: 1px solid #ccc;
                min-width: 100px;
                box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
                z-index: 999;
            }
            .context-menu-item {
                padding: 5px 10px;
                cursor: pointer;
            }
            .context-menu-item:hover {
                background-color: #24d0d6;
            }
        style>
    head>
    <body>
    
    <div id="targetDiv1" class="target-divs" style="width: 300px; height: 300px; background-color: #eee;">
        右键点击我显示自定义菜单
    div>
    
    <div id="targetDiv2" class="target-divs" style="width: 300px; height: 300px; background-color: #ddd;">
        右键点击我显示自定义菜单
    div>
    
    <div id="contextMenu" class="context-menu">
        <div class="context-menu-item" onclick="handleItemClick('复制')">复制div>
        <div class="context-menu-item" onclick="handleItemClick('粘贴')">粘贴div>
        <div class="context-menu-item" onclick="handleItemClick('剪切')">剪切div>
    div>
    
    <script>
        const targetDivs = document.getElementsByClassName('target-divs');
    
        for (const div of targetDivs) {
            div.addEventListener('contextmenu', function (e) {
                e.preventDefault(); // 阻止默认右键菜单
    
                var menu = document.getElementById('contextMenu');
                menu.style.display = 'block';
                menu.style.left = `${e.pageX}px`;
                menu.style.top = `${e.pageY}px`;
            });
        }
    
        document.addEventListener('click', function () {
            document.getElementById('contextMenu').style.display = 'none'; // 点击页面其他地方隐藏菜单
        });
    
        function handleItemClick(itemName) {
            console.log(`用户点击了菜单项:${itemName}`);
            // 在此处添加实际的业务逻辑,如执行复制、粘贴或剪切操作
            switch (itemName) {
                case '复制':
                    // 执行复制操作...
                    break;
                case '粘贴':
                    // 执行粘贴操作...
                    break;
                case '剪切':
                    // 执行剪切操作...
                    break;
            }
            document.getElementById('contextMenu').style.display = 'none'; // 点击菜单项后隐藏菜单
        }
    script>
    
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    结果如下所示

    在这里插入图片描述
    在这个例子中,我们首先通过类名target-divs获取所有需要添加右键菜单功能的div元素,然后遍历这个集合,为每个元素添加右键菜单事件监听器。这样,在任何具有target-divs类名的div上右键点击时都会显示自定义菜单。

  • 相关阅读:
    微软在Windows 11推出Copilot,将DALL-E 3集成在Bing!
    这几个小插件助你快速提升工作效率
    追求性能极致:Redis6.0的多线程模型
    软考高项-项目文档管理
    python-37-python微服务框架Nameko
    代码随想录算法训练营Day59 | 503.下一个更大元素II 42. 接雨水
    35岁左右的项目经理,这5种能力一定要有​
    SSM+学生惩奖系统 毕业设计-附源码201520
    网络安全笔记 -- XSS跨站(原理、分类)
    RK3399驱动开发 | 14 - AP6255 SDIO WiFi 调试(基于linux5.4.32内核)
  • 原文地址:https://blog.csdn.net/m0_62317155/article/details/136438651