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

后端 未结 19 1560
广开言路
广开言路 2020-11-22 15:54

I want to add a custom right-click menu to my web application. Can this be done without using any pre-built libraries? If so, how to display a simple custom right-click menu

19条回答
  •  旧巷少年郎
    2020-11-22 16:31

    Was very useful for me. For the sake of people like me, expecting the drawing of menu, I put here the code I used to make the right-click menu:

    $(document).ready(function() {
    
    
      if ($("#test").addEventListener) {
        $("#test").addEventListener('contextmenu', function(e) {
          alert("You've tried to open context menu"); //here you draw your own menu
          e.preventDefault();
        }, false);
      } else {
    
        //document.getElementById("test").attachEvent('oncontextmenu', function() {
        //$(".test").bind('contextmenu', function() {
        $('body').on('contextmenu', 'a.test', function() {
    
    
          //alert("contextmenu"+event);
          document.getElementById("rmenu").className = "show";
          document.getElementById("rmenu").style.top = mouseY(event) + 'px';
          document.getElementById("rmenu").style.left = mouseX(event) + 'px';
    
          window.event.returnValue = false;
    
    
        });
      }
    
    });
    
    // this is from another SO post...  
    $(document).bind("click", function(event) {
      document.getElementById("rmenu").className = "hide";
    });
    
    
    
    function mouseX(evt) {
      if (evt.pageX) {
        return evt.pageX;
      } else if (evt.clientX) {
        return evt.clientX + (document.documentElement.scrollLeft ?
          document.documentElement.scrollLeft :
          document.body.scrollLeft);
      } else {
        return null;
      }
    }
    
    function mouseY(evt) {
      if (evt.pageY) {
        return evt.pageY;
      } else if (evt.clientY) {
        return evt.clientY + (document.documentElement.scrollTop ?
          document.documentElement.scrollTop :
          document.body.scrollTop);
      } else {
        return null;
      }
    }
    .show {
      z-index: 1000;
      position: absolute;
      background-color: #C0C0C0;
      border: 1px solid blue;
      padding: 2px;
      display: block;
      margin: 0;
      list-style-type: none;
      list-style: none;
    }
    
    .hide {
      display: none;
    }
    
    .show li {
      list-style: none;
    }
    
    .show a {
      border: 0 !important;
      text-decoration: none;
    }
    
    .show a:hover {
      text-decoration: underline !important;
    }
    
    
    
    
    
    
    
    
    
    

提交回复
热议问题