Hoe voeg ik een aangepast rechtsklikmenu toe aan een webpagina?

Ik wil een aangepast rechtsklikmenu toevoegen aan mijn webtoepassing. Kan dit worden gedaan zonder vooraf gebouwde bibliotheken te gebruiken? Zo ja, hoe geeft u dan een eenvoudig aangepast rechtsklikmenu weer dat geen JavaScript-bibliotheek van derden gebruikt?

Ik streef naar iets dat lijkt op wat Google Documenten doet. Hiermee kunnen gebruikers met de rechtermuisknop klikken en de gebruikers hun eigen menu laten zien.

OPMERKING:
Ik wil leren hoe ik mijn eigen kan maken in plaats van iets te gebruiken dat iemand al heeft gemaakt, aangezien die bibliotheken van derden meestal vol zitten met functies, terwijl ik alleen functies wil die ik nodig heb, dus ik wil dat het volledig met de hand wordt gemaakt door mij.


Antwoord 1, autoriteit 100%

Uw vraag beantwoorden – gebruik de gebeurtenis contextmenu, zoals hieronder:

if (document.addEventListener) {
  document.addEventListener('contextmenu', function(e) {
    alert("You've tried to open context menu"); //here you draw your own menu
    e.preventDefault();
  }, false);
} else {
  document.attachEvent('oncontextmenu', function() {
    alert("You've tried to open context menu");
    window.event.returnValue = false;
  });
}
<body>
  Lorem ipsum...
</body>

Antwoord 2, autoriteit 24%

Was erg handig voor mij. Omwille van mensen zoals ik, die de tekening van het menu verwachten, heb ik hier de code geplaatst die ik heb gebruikt om het rechtsklikmenu te maken:

$(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;
}
<!-- jQuery should be at least version 1.7 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="contextmenu.js"></script>
<link rel="stylesheet" href="contextmenu.css" />
<div id="test1">
  <a href="www.google.com" class="test">Google</a>
  <a href="www.google.com" class="test">Link 2</a>
  <a href="www.google.com" class="test">Link 3</a>
  <a href="www.google.com" class="test">Link 4</a>
</div>
<!-- initially hidden right-click menu -->
<div class="hide" id="rmenu">
  <ul>
    <li>
      <a href="http://www.google.com">Google</a>
    </li>
    <li>
      <a href="http://localhost:8080/login">Localhost</a>
    </li>
    <li>
      <a href="C:\">C</a>
    </li>
  </ul>
</div>

Antwoord 3, autoriteit 14%

Een combinatie van wat mooie CSS en wat niet-standaard html-tags zonder externe bibliotheken kan een mooi resultaat geven ( JSFiddle)

HTML

<menu id="ctxMenu">
    <menu title="File">
        <menu title="Save"></menu>
        <menu title="Save As"></menu>
        <menu title="Open"></menu>
    </menu>
    <menu title="Edit">
        <menu title="Cut"></menu>
        <menu title="Copy"></menu>
        <menu title="Paste"></menu>
    </menu>
</menu>

Opmerking: de menutag bestaat niet, ik maak het op (u kunt alles gebruiken)

CSS

#ctxMenu{
    display:none;
    z-index:100;
}
menu {
    position:absolute;
    display:block;
    left:0px;
    top:0px;
    height:20px;
    width:20px;
    padding:0;
    margin:0;
    border:1px solid;
    background-color:white;
    font-weight:normal;
    white-space:nowrap;
}
menu:hover{
    background-color:#eef;
    font-weight:bold;
}
menu:hover > menu{
    display:block;
}
menu > menu{
    display:none;
    position:relative;
    top:-20px;
    left:100%;
    width:55px;
}
menu[title]:before{
    content:attr(title);
}
menu:not([title]):before{
    content:"\2630";
}

De JavaScript is alleen voor dit voorbeeld, ik verwijder het persoonlijk voor persistente menu’s op Windows

var notepad = document.getElementById("notepad");
notepad.addEventListener("contextmenu",function(event){
    event.preventDefault();
    var ctxMenu = document.getElementById("ctxMenu");
    ctxMenu.style.display = "block";
    ctxMenu.style.left = (event.pageX - 10)+"px";
    ctxMenu.style.top = (event.pageY - 10)+"px";
},false);
notepad.addEventListener("click",function(event){
    var ctxMenu = document.getElementById("ctxMenu");
    ctxMenu.style.display = "";
    ctxMenu.style.left = "";
    ctxMenu.style.top = "";
},false);

Houd er rekening mee dat u mogelijk het menu > menu{left:100%;}naar menu > menu{right:100%;}voor een menu dat van rechts naar links uitvouwt. Je zou echter ergens een marge of zoiets moeten toevoegen


Antwoord 4, autoriteit 11%

Volgens de antwoorden hier en op andere ‘flows’ heb ik een versie gemaakt die lijkt op die van Google Chrome, met css3-overgang.
JS Fiddle

Laten we eenvoudig beginnen, aangezien we de js hierboven op deze pagina hebben, kunnen we ons zorgen maken over de css en lay-out. De layout die we gaan gebruiken is een <a>element met een <img>element of een font awesome icoon (<i class="fa fa-flag"></i>) en een <span>om de sneltoetsen weer te geven. Dit is dus de structuur:

<a href="#" onclick="doSomething()">
  <img src="path/to/image.gif" />
  This is a menu option
  <span>Ctrl + K</span>
</a>

We zullen deze in een div plaatsen en die div tonen door met de rechtermuisknop te klikken. Laten we ze stylen zoals in Google Chrome, zullen we?

#menu a {
  display: block;
  color: #555;
  text-decoration: no[...]

Nu zullen we de code van het geaccepteerde antwoord toevoegen en de X- en Y-waarde van de cursor krijgen. Hiervoor gebruiken we e.clientXen e.clientY. We gebruiken client, dus de menu-div moet worden gerepareerd.

var i = document.getElementById("menu").style;
if (document.addEventListener) {
  document.addEventListener('contextmenu', function(e) {
    var posX = e.clientX;
    var posY = e.client[...]

En dat is het! Voeg gewoon de css-overgangen toe om in en uit te faden, en klaar!


Antwoord 5, autoriteit 4%

Je kunt proberen het contextmenu te blokkeren door het volgende aan je body-tag toe te voegen:

<body oncontextmenu="return false;">

Hierdoor wordt alle toegang tot het contextmenu geblokkeerd (niet alleen vanaf de rechtermuisknop, maar ook vanaf het toetsenbord).

P.S. je kunt dit toevoegen aan elke tag waarvoor je het contextmenu wilt uitschakelen

bijvoorbeeld:

<div class="mydiv" oncontextmenu="return false;">

Alleen het contextmenu in die specifieke div uitschakelen


Antwoord 6, autoriteit 4%

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
<title>Context menu - LabLogic.net</title>
</head>
<body>
<script language="javascript" type="text/javascript">
document.oncontextmenu=RightMouseDown;
document.onmousedown = mouseDown; 
function mouseDown(e) {
    if (e.which==3) {//righClick
        alert("Right-click menu goes here");
    }
}
function RightMouseDown() { return false; }
</script>
</body>
</html>

Getest en werkt in Opera 11.6, firefox 9.01, Internet Explorer 9 en chrome 17
U kunt een werkend voorbeeld bekijken op javascript rechtsklikmenu


Antwoord 7, autoriteit 4%

De eenvoudigste startfunctie, maak een contextmenu op de cursorpositie, dat zichzelf vernietigt bij het verlaten van de muis.

oncontextmenu = (e) => {
  e.preventDefault()
  let menu = document.createElement("div")
  menu.id = "ctxmenu"
  menu.style = `top:${e.pageY-10}px;left:${e.pageX-40}px`
  menu.onmouseleave = () => ctxmenu.outerHTML = ''
  menu.innerHTML = "<p>Option1</p><p>Option2</p><p>Option3</p><p>Option4</p><p onclick='alert(`Thank you!`)'>Upvote</p>"
  document.body.appendChild(menu)
}
#ctxmenu {
  position: fixed;
  background:ghostwhite;
  color: black;
  cursor: pointer;
  border: 1px black solid
}
#ctxmenu > p {
  padding: 0 1rem;
  margin: 0
}
#ctxmenu > p:hover {
  background: black;
  color: ghostwhite
}

Antwoord 8, autoriteit 4%

Pure JS- en css-oplossing voor een echt dynamisch rechtsklik-contextmenu, zij het gebaseerd op vooraf gedefinieerde naamgevingsconventies voor de elementen id, links, enz.
jsfiddle
en de code die je zou kunnen kopiëren en plakken in een enkele statische html-pagina:

var rgtClickContextMenu = document.getElementById('div-context-menu');
/** close the right click context menu on click anywhere else in the page*/
document.onclick = function(e) {
  rgtClickContextMenu.style.display = 'none';
}
/**
 present the right click context menu ONLY for the elements having the right class
 by replacing the 0 or any digit after the "to-" string with the element id , which
 triggered the event
*/
document.oncontextmenu = function(e) {
  //alert(e.target.id)
  var elmnt = e.target
  if (elmnt.className.startsWith("cls-context-menu")) {
    e.preventDefault();
    var eid = elmnt.id.replace(/link-/, "")
    rgtClickContextMenu.style.left = e.pageX + 'px'
    rgtClickContextMenu.style.top = e.pageY + 'px'
    rgtClickContextMenu.style.display = 'block'
    var toRepl = "to=" + eid.toString()
    rgtClickContextMenu.innerHTML = rgtClickContextMenu.innerHTML.replace(/to=\d+/g, toRepl)
    //alert(rgtClickContextMenu.innerHTML.toString())
  }
}
.cls-context-menu-link {
  display: block;
  padding: 20px;
  background: #ECECEC;
}
.cls-context-menu {
  position: absolute;
  display: none;
}
.cls-context-menu ul,
#context-menu li {
  list-style: none;
  margin: 0;
  padding: 0;
  background: white;
}
.cls-context-menu {
  border: solid 1px #CCC;
}
.cls-context-menu li {
  border-bottom: solid 1px #CCC;
}
.cls-context-menu li:last-child {
  border: none;
}
.cls-context-menu li a {
  display: block;
  padding: 5px 10px;
  text-decoration: none;
  color: blue;
}
.cls-context-menu li a:hover {
  background: blue;
  color: #FFF;
}
<!-- those are the links which should present the dynamic context menu -->
<a id="link-1" href="#" class="cls-context-menu-link">right click link-01</a>
<a id="link-2" href="#" class="cls-context-menu-link">right click link-02</a>
<!-- this is the context menu -->
<!-- note the string to=0 where the 0 is the digit to be replaced -->
<div id="div-context-menu" class="cls-context-menu">
  <ul>
    <li><a href="#to=0">link-to=0 -item-1 </a></li>
    <li><a href="#to=0">link-to=0 -item-2 </a></li>
    <li><a href="#to=0">link-to=0 -item-3 </a></li>
  </ul>
</div>

Antwoord 9, autoriteit 2%

Ik weet dat dit al is beantwoord, maar ik heb enige tijd geworsteld met het tweede antwoord om het native contextmenu te laten verdwijnen enhet te laten verschijnen waar de gebruiker heeft geklikt.
HTML

<body>
    <div id="test1">
        <a href="www.google.com" class="test">Google</a>
        <a href="www.google.com" class="test">Link 2</a>
        <a href="www.google.com" class="test">Link 3</a>
        <a href="www.google.com" class="test">Link 4</a>
    </div>
    <!-- initially hidden right-click menu -->
    <div class="hide" id="rmenu">
        <ul>
            <li class="White">White</li>
            <li>Green</li>
            <li>Yellow</li>
            <li>Orange</li>
            <li>Red</li>
            <li>Blue</li>
        </ul>
    </div>
</body>

CSS

.hide {
  display: none;
}
#rmenu {
  border: 1px solid black;
  background-color: white;
}
#rmenu ul {
  padding: 0;
  list-style: none;
}
#rmenu li
{
  list-style: none;
  padding-left: 5px;
  padding-right: 5px;
}

JavaScript

if (document.getElementById('test1').addEventListener) {
    document.getElementById('test1').addEventListener('contextmenu', function(e) {
            $("#rmenu").toggleClass("hide");
            $("#rmenu").css(
              {
                position: "absolute",
                top: e.pageY,
                left: e.pageX
              }
            );
            e.preventDefault();
     }, false);
}
// this is from another SO post...  
$(document).bind("click", function(event) {
  document.getElementById("rmenu").className = "hide";
});

CodePen-voorbeeld


Antwoord 10, autoriteit 2%

Probeer dit

$(function() {
var doubleClicked = false;
$(document).on("contextmenu", function (e) {
if(doubleClicked == false) {
e.preventDefault(); // To prevent the default context menu.
var windowHeight = $(window).height()/2;
var windowWidth = $(window).width()/2;
if(e.clientY > windowHeight && e.clientX <= windowWidth) {
  $("#contextMenuContainer").css("left", e.clientX);
  $("#contextMenuContainer").css("bottom", $(window).height()-e.clientY);
  $("#contextMenuContainer").css("right", "auto");
  $("#contextMenuContainer").css("top", "auto");
} else if(e.clientY > windowHeight && e.clientX > windowWidth) {
  $("#contextMenuContainer").css("right", $(window).width()-e.clientX);
  $("#contextMenuContainer").css("bottom", $(window).height()-e.clientY);
  $("#contextMenuContainer").css("left", "auto");
  $("#contextMenuContainer").css("top", "auto");
} else if(e.clientY <= windowHeight && e.clientX <= windowWidth) {
  $("#contextMenuContainer").css("left", e.clientX);
  $("#contextMenuContainer").css("top", e.clientY);
  $("#contextMenuContainer").css("right", "auto");
  $("#contextMenuContainer").css("bottom", "auto");
} else {
  $("#contextMenuContainer").css("right", $(window).width()-e.clientX);
  $("#contextMenuContainer").css("top", e.clientY);
  $("#contextMenuContainer").css("left", "auto");
  $("#contextMenuContainer").css("bottom", "auto");
}
 $("#contextMenuContainer").fadeIn(500, FocusContextOut());
  doubleClicked = true;
} else {
  e.preventDefault();
  doubleClicked = false;
  $("#contextMenuContainer").fadeOut(500);
}
});
function FocusContextOut() {
 $(document).on("click", function () {
   doubleClicked = false; 
   $("#contextMenuContainer").fadeOut(500);
   $(document).off("click");           
 });
}
});

http://jsfiddle.net/AkshayBandivadekar/zakn7Lwb/14/


Antwoord 11

Hier is een zeer goede zelfstudie over het bouwen van een aangepast contextmenumet een volledig werkend codevoorbeeld (zonder JQuery en andere bibliotheken).

Je kunt hun democode ook vinden op GitHub.

Ze geven een gedetailleerde stapsgewijze uitleg die u kunt volgen om uw eigen contextmenu met de rechtermuisknop te bouwen (inclusief html-, css- en javascript-code) en deze aan het einde samen te vatten door de volledige voorbeeldcode te geven.

Je kunt het gemakkelijk volgen en aanpassen aan je eigen behoeften. En er is geen behoefte aan JQuery of andere bibliotheken.

Zo ziet hun voorbeeldmenucode eruit:

<nav id="context-menu" class="context-menu">
    <ul class="context-menu__items">
      <li class="context-menu__item">
        <a href="#" class="context-menu__link" data-action="View"><i class="fa fa-eye"></i> View Task</a>
      </li>
      <li class="context-menu__item">
        <a href="#" class="context-menu__link" data-action="Edit"><i class="fa fa-edit"></i> Edit Task</a>
      </li>
      <li class="context-menu__item">
        <a href="#" class="context-menu__link" data-action="Delete"><i class="fa fa-times"></i> Delete Task</a>
      </li>
    </ul>
  </nav>

Een werkend voorbeeld (takenlijst) is te vinden op codepen.


Antwoord 12

Probeer dit:

var cls = true;
var ops;
window.onload = function() {
    document.querySelector(".container").addEventListener("mouseenter", function() {
        cls = false;
    });
    document.querySelector(".container").addEventListener("mouseleave", function() {
        cls = true;
    });
    ops = document.querySelectorAll(".container td");
    for (let i = 0; i < ops.length; i++) {
        ops[i].addEventListener("click", function() {
            document.querySelector(".position").style.display = "none";
        });
    }
    ops[0].addEventListener("click", function() {
        setTimeout(function() {
            /* YOUR FUNCTION */
            alert("Alert 1!");
        }, 50);
    });
    ops[1].addEventListener("click", function() {
        setTimeout(function() {
            /* YOUR FUNCTION */
            alert("Alert 2!");
        }, 50);
    });
    ops[2].addEventListener("click", function() {
        setTimeout(function() {
            /* YOUR FUNCTION */
            alert("Alert 3!");
        }, 50);
    });
    ops[3].addEventListener("click", function() {
        setTimeout(function() {
            /* YOUR FUNCTION */
            alert("Alert 4!");
        }, 50);
    });
    ops[4].addEventListener("click", function() {
        setTimeout(function() {
            /* YOUR FUNCTION */
            alert("Alert 5!");
        }, 50);
    });
}
document.addEventListener("contextmenu", function() {
    var e = window.event;
    e.preventDefault();
    document.querySelector(".container").style.padding = "0px";
    var x = e.clientX;
    var y = e.clientY;
    var docX = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || document.body.offsetWidth;
    var docY = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || document.body.offsetHeight;
    var border = parseInt(getComputedStyle(document.querySelector(".container"), null).getPropertyValue('border-width'));
    var objX = parseInt(getComputedStyle(document.querySelector(".container"), null).getPropertyValue('width')) + 2;
    var objY = parseInt(getComputedStyle(document.querySelector(".container"), null).getPropertyValue('height')) + 2;
    if (x + objX > docX) {
        let diff = (x + objX) - docX;
        x -= diff + border;
    }
    if (y + objY > docY) {
        let diff = (y + objY) - docY;
        y -= diff + border;
    }
    document.querySelector(".position").style.display = "block";
    document.querySelector(".position").style.top = y + "px";
    document.querySelector(".position").style.left = x + "px";
});
window.addEventListener("resize", function() {
    document.querySelector(".position").style.display = "none";
});
document.addEventListener("click", function() {
    if (cls) {
        document.querySelector(".position").style.display = "none";
    }
});
document.addEventListener("wheel", function() {
    if (cls) {
        document.querySelector(".position").style.display = "none";
        static = false;
    }
});
.position {
    position: absolute;
    width: 1px;
    height: 1px;
    z-index: 2;
    display: none;
}
.container {
    width: 220px;
    height: auto;
    border: 1px solid black;
    background: rgb(245, 243, 243);
}
.container p {
    height: 30px;
    font-size: 18px;
    font-family: arial;
    width: 99%;
    cursor: pointer;
    display: flex;
    justify-content: center;
    align-items: center;
    background: rgb(245, 243, 243);
    color: black;
    transition: 0.2s;
}
.container p:hover {
    background: lightblue;
}
td {
    font-family: arial;
    font-size: 20px;
}
td:hover {
    background: lightblue;
    transition: 0.2s;
    cursor: pointer;
}
<div class="position">
    <div class="container" align="center">
        <table style="text-align: left; width: 99%; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
            <tbody>
                <tr>
                    <td style="vertical-align: middle; text-align: center;">Option 1<br>
                    </td>
                </tr>
                <tr>
                    <td style="vertical-align: middle; text-align: center;">Option 2<br>
                    </td>
                </tr>
                <tr>
                    <td style="vertical-align: middle; text-align: center;">Option 3<br>
                    </td>
                </tr>
                <tr>
                    <td style="vertical-align: middle; text-align: center;">Option 4<br>
                    </td>
                </tr>
                <tr>
                    <td style="vertical-align: middle; text-align: center;">Option 5<br>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
</div>

Antwoord 13

Je kunt het doen met deze code.
bezoek hier voor de volledige tutorial met automatische randdetectie http://www.voidtricks.com /custom-right-click-context-menu/

$(document).ready(function () {
 $("html").on("contextmenu",function(e){
        //prevent default context menu for right click
        e.preventDefault();
        var menu = $(".menu"); 
        //hide menu if already shown
        menu.hide(); 
        //get x and y values of the click event
        var pageX = e.pageX;
        var pageY = e.pageY;
        //position menu div near mouse cliked area
        menu.css({top: pageY , left: pageX});
        var mwidth = menu.width();
        var mheight = menu.height();
        var screenWidth = $(window).width();
        var screenHeight = $(window).height();
        //if window is scrolled
        var scrTop = $(window).scrollTop();
        //if the menu is close to right edge of the window
        if(pageX+mwidth > screenWidth){
        menu.css({left:pageX-mwidth});
        }
        //if the menu is close to bottom edge of the window
        if(pageY+mheight > screenHeight+scrTop){
        menu.css({top:pageY-mheight});
        }
        //finally show the menu
        menu.show();
 }); 
 $("html").on("click", function(){
 $(".menu").hide();
 });
 });

`


Antwoord 14

<script language="javascript" type="text/javascript">
  document.oncontextmenu = RightMouseDown; 
  document.onmousedown = mouseDown; 
  function mouseDown(e) {
    if (e.which==3) {//righClick
      alert("Right-click menu goes here");
    } 
  }
  function RightMouseDown() { 
    return false; 
  }
</script>
</body> 
</html>

Antwoord 15

Een eenvoudige manier om dit te doen, is door onContextMenu te gebruiken om een JavaScript-functie te retourneren:

<input type="button" value="Example" onContextMenu="return RightClickFunction();">
<script>
 function RightClickFunction() {
  // Enter your code here;
  return false;
 }
</script>

En door return false;in te voeren, annuleert u het contextmenu.

als je nog steeds het contextmenu wilt weergeven, kun je de regel return false;verwijderen.


Antwoord 16

Getest en werkt in Opera 12.17, Firefox 30, Internet Explorer 9 en Chrome 26.0.1410.64

document.oncontextmenu =function( evt ){
        alert("OK?");
        return false;
        }

Antwoord 17

<script>
function fun(){
document.getElementById('menu').style.display="block";
}
</script>
<div id="menu" style="display: none"> menu items</div>
<body oncontextmenu="fun();return false;">

Wat ik hier doe

  1. Maak je eigen aangepaste div-menu en stel de positie in: absoluut en display:none voor het geval dat.
  2. Voeg aan de pagina of het element waarop moet worden geklikt de gebeurtenis in het contextmenu toe.
  3. Annuleer de standaard browseractie met false.
  4. Gebruik js om uw eigen acties op te roepen.


Antwoord 18

Onthoud dat als u de Firefox-oplossing alleen wilt gebruiken, als u deze aan het hele document wilt toevoegen, u contextmenu="mymenu"moet toevoegen aan de <html>tag niet naar de bodytag.
Hier moet je op letten.


Antwoord 19

<html>
<head>
<style>
.rightclick {
    /* YOUR CONTEXTMENU'S CSS */
    visibility: hidden;
    background-color: white;
    border: 1px solid grey;
    width: 200px;
    height: 300px;
}
</style>
</head>
<body>
  <div class="rightclick" id="ya">
    <p onclick="alert('choc-a-late')">I like chocolate</p><br><p onclick="awe-so-me">I AM AWESOME</p>
  </div>
  <p>Right click to get sweet results!</p>
</body>
<script>
    document.onclick = noClick;
    document.oncontextmenu = rightClick;
    function rightClick(e) {
        e = e || window.event;
        e.preventDefault();
        document.getElementById("ya").style.visibility = "visible";
        console.log("Context Menu v1.3.0 by IamGuest opened.");
   }
function noClick() {
    document.getElementById("ya").style.visibility = "hidden";
    console.log("Context Menu v1.3.0 by IamGuest closed.");
}
</script>
<!-- Coded by IamGuest. Thank you for using this code! -->
</html>

Je kunt deze code aanpassen en aanpassen om een beter uitziend, efficiënter contextmenu te maken. Wat betreft het wijzigen van een bestaand contextmenu, ik weet niet zeker hoe ik dat moet doen… Bekijk dit vioolvoor een georganiseerd standpunt. Probeer ook op de items in mijn contextmenu te klikken. Ze zouden je een paar geweldige berichten moeten waarschuwen. Als ze niet werken, probeer dan iets meer… complexs.


Antwoord 20

Ik gebruik iets dat lijkt op het volgende jsfiddle

function onright(el, cb) {
    //disable right click
    document.body.oncontextmenu = 'return false';
    el.addEventListener('contextmenu', function (e) { e.preventDefault(); return false });
    el.addEventListener('mousedown', function (e) {
        e = e || window.event;
        if (~~(e.button) === 2) {
            if (e.preventDefault) {
                e.preventDefault();
            } else {
                e.returnValue = false;
            }
            return false;
        }
    });
    // then bind Your cb
    el.addEventListener('mousedown', function (e) {
        e = e || window.event;
        ~~(e.button) === 2 && cb.call(el, e);
    });
}

als u zich op oudere IE-browsers richt, moet u dit sowieso invullen met de ‘ attachEvent; geval

Other episodes