JAVASCRIPT

Create a Custom Context Menu

Build a custom right-click context menu using JavaScript to offer tailored actions, enhancing user interaction and page functionality.

document.addEventListener('DOMContentLoaded', () => {
  const targetElement = document.getElementById('myTargetElement');
  let contextMenu = null;

  function createContextMenu(x, y) {
    if (contextMenu) contextMenu.remove(); // Remove existing menu

    contextMenu = document.createElement('div');
    contextMenu.className = 'custom-context-menu';
    contextMenu.style.position = 'fixed';
    contextMenu.style.top = `${y}px`;
    contextMenu.style.left = `${x}px`;
    contextMenu.style.backgroundColor = '#fff';
    contextMenu.style.border = '1px solid #ccc';
    contextMenu.style.boxShadow = '2px 2px 5px rgba(0,0,0,0.2)';
    contextMenu.style.padding = '5px 0';
    contextMenu.style.zIndex = '1000';

    const items = ['Option 1', 'Option 2', 'Option 3'];
    items.forEach(itemText => {
      const menuItem = document.createElement('div');
      menuItem.className = 'context-menu-item';
      menuItem.style.padding = '8px 15px';
      menuItem.style.cursor = 'pointer';
      menuItem.style.whiteSpace = 'nowrap';
      menuItem.textContent = itemText;
      menuItem.addEventListener('mouseenter', () => menuItem.style.backgroundColor = '#f0f0f0');
      menuItem.addEventListener('mouseleave', () => menuItem.style.backgroundColor = '');
      menuItem.addEventListener('click', () => {
        alert(`Clicked: ${itemText}`);
        contextMenu.remove();
        contextMenu = null;
      });
      contextMenu.appendChild(menuItem);
    });

    document.body.appendChild(contextMenu);
  }

  targetElement.addEventListener('contextmenu', (e) => {
    e.preventDefault(); // Prevent default browser context menu
    createContextMenu(e.clientX, e.clientY);
  });

  // Close context menu if clicked anywhere else
  document.addEventListener('click', (e) => {
    if (contextMenu && !contextMenu.contains(e.target)) {
      contextMenu.remove();
      contextMenu = null;
    }
  });
});
/*
HTML structure example:
<style>
  #myTargetElement {
    width: 300px;
    height: 200px;
    border: 2px dashed purple;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: sans-serif;
    user-select: none;
    margin: 20px;
  }
</style>
<div id="myTargetElement">Right-click me for a custom menu</div>
*/
How it works: This code creates a custom context menu that appears when a user right-clicks on a designated element. It prevents the browser's default context menu and dynamically creates a new `div` at the mouse cursor's position. The menu contains clickable options, and it automatically closes if the user clicks anywhere outside of the menu, providing a tailored and accessible interaction.

Need help integrating this into your project?

Our team of expert developers can help you build your custom application from scratch.

Hire DigitalCodeLabs