Context menu in web

html JavaScript
<style>
  .context {
    position: absolute;
  }
  .elm-menu {
    margin: 8px;
    padding: 0 4px;
  }

  .elm-menu:hover {
    background-color: #eee;
  }

  .elm {
    height: 100px;
    width: 100px;
    margin: 8px;
    padding: 0 4px;
    background-color: yellow;
    color: blue;
  }

  .cmenu {
    background-color: #fff;
    z-index: 2300;
    display: block;
    position: absolute;
    box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2);
    text-decoration: none;
    cursor: default;
    margin-top: -4px;
    min-height: 50px;
    min-width: 100px;
    max-height: 640px;
  }
</style>
<div id="cmenu" class="cmenu" style="display:none">
  <div class="elm-menu">default</div>
  <div class="elm-menu">menu</div>
</div>
<div id="cmenu1" class="cmenu" style="display:none">
  <div class="elm-menu">elm1</div>
  <div class="elm-menu">menu</div>
  <div class="elm-menu">contextuel</div>
</div>
<div id="cmenu2" class="cmenu" style="display:none">
  <div class="elm-menu">elm2</div>
  <div class="elm-menu">menu</div>
  <div class="elm-menu">contextuel</div>
</div>
<div class="context">
  <div data-menu="#cmenu">Text for test default menu</div>
  <div data-menu="#cmenu1" class="elm">Box for test menu 1</div>
  <div data-menu="#cmenu2" class="elm">Box for test menu 2</div>
</div>
<script>
  let context = document.querySelector(".context");
  context.addEventListener('contextmenu', elem => {
    elem.preventDefault();

    // Show menu
    document.querySelectorAll(".cmenu").forEach(i => i.style.display = "none");
    if (!elem.srcElement.dataset.menu) return;
    let menu = document.querySelector(elem.srcElement.dataset.menu)
    menu.style.display = "block";
    let mouse = (() => {
      console.log(elem);
      if (elem.layerX || elem.layerY)
        return {
          x: elem.layerX + 10,
          y: elem.layerY + 10
        }
      return {
        x: 0,
        y: 0
      }
    })();

    menu.style.left = (context.innerWidth - mouse.x < menu.offsetWidth) ?
      context.innerWidth - menu.offsetWidth + "px" : mouse.x + "px";

    menu.style.top = (context.innerHeight - mouse.y < menu.offsetHeight) ?
      context.innerHeight - menu.offsetHeight + "px" :
      mouse.y + "px";
  });
  context.addEventListener('click', () =>
    document.querySelectorAll(".cmenu").forEach(i => i.style.display = "none")
  );
</script>
Text for test default menu
Box for test menu 1
Box for test menu 2