How to add a custom right-click menu to a webpage?

A custom right-click menu allows you to replace the browser's default context menu with your own styled menu. This provides better control over user interactions and creates a more integrated user experience. The process involves preventing the default browser behavior and displaying your custom menu at the cursor position.

Syntax

/* Hide custom menu by default */
#custom-menu {
    display: none;
    position: absolute;
}

/* JavaScript events */
document.oncontextmenu = function(event) {
    event.preventDefault();
    /* Show custom menu */
};

Step 1: Preventing Default Context Menu

First, we need to disable the browser's default right-click menu using the preventDefault() method

<!DOCTYPE html>
<html>
<head>
<style>
    .demo-area {
        background-color: #4CAF50;
        color: white;
        height: 200px;
        display: flex;
        align-items: center;
        justify-content: center;
        font-family: Arial, sans-serif;
    }
</style>
</head>
<body>
    <div class="demo-area">
        <h2>Right-click here - Default menu is disabled</h2>
    </div>

    <script>
        document.oncontextmenu = function(event) {
            event.preventDefault();
            return false;
        };
    </script>
</body>
</html>
A green box appears with white text. Right-clicking on it does not show the browser's default context menu.

Step 2: Creating Custom Context Menu

Now we'll create a custom menu that appears at the cursor position when right-clicking

<!DOCTYPE html>
<html>
<head>
<style>
    .demo-area {
        background-color: #2196F3;
        color: white;
        height: 300px;
        display: flex;
        align-items: center;
        justify-content: center;
        font-family: Arial, sans-serif;
    }

    #customMenu {
        display: none;
        position: absolute;
        background-color: white;
        border: 1px solid #ccc;
        border-radius: 4px;
        box-shadow: 0 2px 10px rgba(0,0,0,0.2);
        z-index: 1000;
        min-width: 150px;
    }

    .menu-item {
        padding: 10px 15px;
        cursor: pointer;
        border-bottom: 1px solid #eee;
        font-size: 14px;
    }

    .menu-item:hover {
        background-color: #f5f5f5;
    }

    .menu-item:last-child {
        border-bottom: none;
    }
</style>
</head>
<body>
    <div class="demo-area">
        <h2>Right-click to see custom menu</h2>
    </div>

    <div id="customMenu">
        <div class="menu-item">Copy</div>
        <div class="menu-item">Paste</div>
        <div class="menu-item">Cut</div>
        <div class="menu-item">Delete</div>
        <div class="menu-item">Properties</div>
    </div>

    <script>
        const customMenu = document.getElementById('customMenu');

        // Show custom menu on right-click
        document.oncontextmenu = function(event) {
            event.preventDefault();
            customMenu.style.display = 'block';
            customMenu.style.left = event.pageX + 'px';
            customMenu.style.top = event.pageY + 'px';
        };

        // Hide menu on left-click
        document.onclick = function() {
            customMenu.style.display = 'none';
        };

        // Add click functionality to menu items
        document.querySelectorAll('.menu-item').forEach(item => {
            item.onclick = function() {
                alert('You clicked: ' + this.textContent);
                customMenu.style.display = 'none';
            };
        });
    </script>
</body>
</html>
A blue box appears. Right-clicking shows a custom white menu with options like Copy, Paste, Cut, Delete, and Properties. Clicking any menu item shows an alert with the selected option. The menu disappears when clicking elsewhere.

Key Features

  • Position Tracking Menu appears exactly where you right-click using event.pageX and event.pageY

  • Event Prevention preventDefault() stops the default browser menu

  • Auto-hide Menu disappears when clicking elsewhere on the page

  • Interactive Items Each menu item can have its own click functionality

Conclusion

Custom right-click menus provide enhanced user experience by replacing browser defaults with tailored options. The key is preventing default behavior and positioning the menu at cursor coordinates for intuitive interaction.

Updated on: 2026-03-15T17:27:11+05:30

4K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements