मेरे वेब-ऐप के लिए कस्टम राइट-क्लिक संदर्भ मेनू बनाना


127

मेरे पास Google-डॉक्स और मानचित्र-खोज जैसी कुछ वेबसाइटें हैं, जिनके राइट-क्लिक करने पर आपके पास ड्रॉप डाउन मेनू हैं। किसी तरह वे ड्रॉप-डाउन मेनू के ब्राउज़र के व्यवहार को ओवरराइड करते हैं, और मुझे अब यकीन है कि वे इसे कैसे करते हैं। मुझे एक jQuery प्लगइन मिला जो ऐसा करता है, लेकिन मैं अभी भी कुछ चीजों के बारे में उत्सुक हूं:

  • यह कैसे काम करता है? क्या ब्राउज़र का ड्रॉप-डाउन मेनू वास्तव में ओवरराइड हो रहा है, या प्रभाव केवल नकली है? यदि हां, तो कैसे?
  • प्लगइन सार क्या दूर है? पर्दे के पीछे क्या चल रहा है?
  • क्या यह इस प्रभाव को प्राप्त करने का एकमात्र तरीका है?

कस्टम संदर्भ मेनू छवि

कार्रवाई में कई कस्टम-संदर्भ मेनू देखें

जवाबों:


219

मुझे पता है कि यह प्रश्न बहुत पुराना है, लेकिन बस उसी समस्या के साथ आया और इसे स्वयं हल किया, इसलिए मैं जवाब दे रहा हूं कि कोई भी इसे Google के माध्यम से पाता है जैसा मैंने किया था। मैंने @ एंड्रयू के एक पर अपना समाधान आधारित किया, लेकिन मूल रूप से बाद में सब कुछ संशोधित किया।

संपादित करें : यह देखते हुए कि यह हाल ही में कितना लोकप्रिय हो गया है, मैंने इसे 2014 की तरह दिखने के लिए शैलियों को भी अपडेट करने का फैसला किया और विंडोज़ 95 की तरह कम। मैंने बग्स को तय किया @Quantico और @Trengot को स्पॉट किया ताकि अब यह एक अधिक ठोस जवाब हो।

संपादित करें 2 : मैंने इसे स्टैकस्नीपेट्स के साथ स्थापित किया क्योंकि वे वास्तव में एक अच्छी नई सुविधा हैं। मैं संदर्भ विचार के लिए अच्छी jsfiddle को यहां छोड़ता हूं (उन्हें काम करने के लिए 4 वें पैनल पर क्लिक करें)।

नई स्टैक स्निपेट:

// JAVASCRIPT (jQuery)

// Trigger action when the contexmenu is about to be shown
$(document).bind("contextmenu", function (event) {
    
    // Avoid the real one
    event.preventDefault();
    
    // Show contextmenu
    $(".custom-menu").finish().toggle(100).
    
    // In the right position (the mouse)
    css({
        top: event.pageY + "px",
        left: event.pageX + "px"
    });
});


// If the document is clicked somewhere
$(document).bind("mousedown", function (e) {
    
    // If the clicked element is not the menu
    if (!$(e.target).parents(".custom-menu").length > 0) {
        
        // Hide it
        $(".custom-menu").hide(100);
    }
});


// If the menu element is clicked
$(".custom-menu li").click(function(){
    
    // This is the triggered action name
    switch($(this).attr("data-action")) {
        
        // A case for each action. Your actions here
        case "first": alert("first"); break;
        case "second": alert("second"); break;
        case "third": alert("third"); break;
    }
  
    // Hide it AFTER the action was triggered
    $(".custom-menu").hide(100);
  });
/* CSS3 */

/* The whole thing */
.custom-menu {
    display: none;
    z-index: 1000;
    position: absolute;
    overflow: hidden;
    border: 1px solid #CCC;
    white-space: nowrap;
    font-family: sans-serif;
    background: #FFF;
    color: #333;
    border-radius: 5px;
    padding: 0;
}

/* Each of the items in the list */
.custom-menu li {
    padding: 8px 12px;
    cursor: pointer;
    list-style-type: none;
    transition: all .3s ease;
    user-select: none;
}

.custom-menu li:hover {
    background-color: #DEF;
}
<!-- HTML -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.js"></script>

<ul class='custom-menu'>
  <li data-action="first">First thing</li>
  <li data-action="second">Second thing</li>
  <li data-action="third">Third thing</li>
</ul>

<!-- Not needed, only for making it clickable on StackOverflow -->
Right click me

नोट: आपको कुछ छोटे कीड़े (कर्सर से दूर गिरना इत्यादि) दिखाई दे सकते हैं, कृपया सुनिश्चित करें कि यह jsfiddle में काम करता है , क्योंकि यह आपके वेबपेज की तुलना में StackSnippets से अधिक हो सकता है।


1
मुझे लगता है कि आपके पास मूसडाउन के साथ एक मुद्दा हो सकता है। यह एक दौड़ की स्थिति पैदा कर सकता है, क्योंकि एक मेनू आइटम पर क्लिक करने से एक क्लिक चालू होता है जो एक मूसडाउन और एक माउस अप होता है।
क्वांटिको

2
धन्यवाद @Quantico, यह सच है और अब इसे कोड और jsfiddle दोनों में तय किया जाना चाहिए। कोई और समस्या? सिडेनोट: वाह, 170 पिछले संपादन jsfiddle के लिए, यह निश्चित रूप से लोकप्रिय हो गया।
फ्रांसिस्को प्रिसेंसिया

1
नई फिडेल का उपयोग करते समय, यदि आप पॉपअप पारदर्शी दिखाई देते हैं यदि आप पृष्ठ पर किसी अन्य HTML तत्वों का उपयोग करते हैं। EDIT: पृष्ठभूमि रंग को css में जोड़ना इसे हल करता है।
होलोले

1
एक और मामूली समस्या: यदि आप मेनू दिखाई देते समय कहीं पर राइट क्लिक करते हैं, तो यह दिखाने से पहले फ़्लिकर करता है। मुझे लगता है कि इसे या तो छिपाना चाहिए (जैसे डिफ़ॉल्ट) या छिपाना और फिर नई स्थिति में दिखाई देना।
होलोते

@ चेतनजोशी को ऐसा लगता है कि इसे MD11 के अनुसार IE11 पर काम करना चाहिए: developer.mozilla.org/en-US/docs/Web/Events/… क्या आपको कोई त्रुटि दिखाई देती है?
फ्रांसिस्को प्रेसेनिया

63

जैसा कि एड्रियन ने कहा, प्लगइन्स उसी तरह काम करने जा रहे हैं। तीन बुनियादी हिस्से हैं जिनकी आपको आवश्यकता है:

1: इवेंट हैंडलर इवेंट के लिए 'contextmenu':

$(document).bind("contextmenu", function(event) {
    event.preventDefault();
    $("<div class='custom-menu'>Custom menu</div>")
        .appendTo("body")
        .css({top: event.pageY + "px", left: event.pageX + "px"});
});

यहां, आप किसी भी चयनकर्ता को इवेंट हैंडलर को बांध सकते हैं, जिसके लिए आप एक मेनू दिखाना चाहते हैं। मैंने पूरा दस्तावेज चुना है।

2: ईवेंट हैंडलर इवेंट के लिए 'click'(कस्टम मेनू को बंद करने के लिए):

$(document).bind("click", function(event) {
    $("div.custom-menu").hide();
});

3: सीएसएस मेनू की स्थिति को नियंत्रित करने के लिए:

.custom-menu {
    z-index:1000;
    position: absolute;
    background-color:#C0C0C0;
    border: 1px solid black;
    padding: 2px;
}

CSS के साथ महत्वपूर्ण बात यह है कि a z-indexऔर को शामिल किया जाएposition: absolute

यह सब एक चालाक jQuery प्लगइन में लपेट करने के लिए बहुत मुश्किल नहीं होगा।

आप यहां एक साधारण डेमो देख सकते हैं: http://jsfiddle.net/andrewwhitaker/fELma/


मुझे लगता है कि यह संदर्भ मेनू अधिक उपयोगी होगा यदि यह खुला रहता है जब उपयोगकर्ता इसके अंदर क्लिक करता है (लेकिन जब उपयोगकर्ता इसके बाहर क्लिक करता है तो बंद हो जाता है)। क्या इसे इस तरह से काम करने के लिए संशोधित किया जा सकता है?
एंडरसन ग्रीन

2
आप पर event.targetक्लिक बाइंडिंग के अंदर देखेंगे document। यदि यह संदर्भ मेनू के अंदर नहीं है, तो मेनू छिपाएं: jsfiddle.net/fELma/286
एंड्रयू व्हिटकर

2
मैंने इसे थोड़ा संशोधित किया (ताकि यह एक बार में कई मेनू दिखाने से रोकता है): jsfiddle.net/fELma/287
एंडरसन ग्रीन

मैं एक रेडियल राइट-क्लिक संदर्भ मेनू बनाने की कोशिश कर रहा हूं (जैसे यहां हैं: push-pixels.org/wp-content/uploads/2012/07/… )। यह समझने में एक शानदार शुरुआत है कि इसके बारे में कैसे जाना जाए, धन्यवाद!
बोरिस

@AndrewWhitaker आपका जवाब कहता है कि यह पूरे दस्तावेज़ पर लागू होगा। क्या होगा यदि मैं चाहता हूं कि इसे एक विशेष नियंत्रण पर लागू किया जाए, उदाहरण के लिए, एक बटन (इसकी आईडी को बटन 1 माना जाता है) ..?
Tk1993

8

<!DOCTYPE html>
<html>
<head>
    <title>Right Click</title>

    <link href="https://swisnl.github.io/jQuery-contextMenu/dist/jquery.contextMenu.css" rel="stylesheet" type="text/css" />

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="https://swisnl.github.io/jQuery-contextMenu/dist/jquery.contextMenu.js" type="text/javascript"></script>

    <script src="https://swisnl.github.io/jQuery-contextMenu/dist/jquery.ui.position.min.js" type="text/javascript"></script>

</head>
<body>
    <span class="context-menu-one" style="border:solid 1px black; padding:5px;">Right Click Me</span>
    <script type="text/javascript">
        
        $(function() {
        $.contextMenu({
            selector: '.context-menu-one', 
            callback: function(key, options) {
                var m = "clicked: " + key;
                window.console && console.log(m) || alert(m); 
            },
            items: {
                "edit": {name: "Edit", icon: "edit"},
                "cut": {name: "Cut", icon: "cut"},
               copy: {name: "Copy", icon: "copy"},
                "paste": {name: "Paste", icon: "paste"},
                "delete": {name: "Delete", icon: "delete"},
                "sep1": "---------",
                "quit": {name: "Quit", icon: function(){
                    return 'context-menu-icon context-menu-icon-quit';
                }}
            }
        });

        $('.context-menu-one').on('click', function(e){
            console.log('clicked', this);
        })    
    });
    </script>
</body>
</html>


4

यहाँ जावास्क्रिप्ट में राइट क्लिक संदर्भ मेनू के लिए एक उदाहरण है: राइट क्लिक संदर्भ मेनू

संदर्भ मेनू कार्यक्षमता के लिए कच्चे जावास्क्रिप्ट कोड का इस्तेमाल किया। क्या आप कृपया इसकी जांच कर सकते हैं, आशा है कि यह आपकी मदद करेगा।

लाइव कोड:

(function() {
  
  "use strict";


  /*********************************************** Context Menu Function Only ********************************/
  function clickInsideElement( e, className ) {
    var el = e.srcElement || e.target;
    if ( el.classList.contains(className) ) {
      return el;
    } else {
      while ( el = el.parentNode ) {
        if ( el.classList && el.classList.contains(className) ) {
          return el;
        }
      }
    }
    return false;
  }

  function getPosition(e) {
    var posx = 0, posy = 0;
    if (!e) var e = window.event;
    if (e.pageX || e.pageY) {
      posx = e.pageX;
      posy = e.pageY;
    } else if (e.clientX || e.clientY) {
      posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
      posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
    }
    return {
      x: posx,
      y: posy
    }
  }

  // Your Menu Class Name
  var taskItemClassName = "thumb";
  var contextMenuClassName = "context-menu",contextMenuItemClassName = "context-menu__item",contextMenuLinkClassName = "context-menu__link", contextMenuActive = "context-menu--active";
  var taskItemInContext, clickCoords, clickCoordsX, clickCoordsY, menu = document.querySelector("#context-menu"), menuItems = menu.querySelectorAll(".context-menu__item");
  var menuState = 0, menuWidth, menuHeight, menuPosition, menuPositionX, menuPositionY, windowWidth, windowHeight;

  function initMenuFunction() {
    contextListener();
    clickListener();
    keyupListener();
    resizeListener();
  }

  /**
   * Listens for contextmenu events.
   */
  function contextListener() {
    document.addEventListener( "contextmenu", function(e) {
      taskItemInContext = clickInsideElement( e, taskItemClassName );

      if ( taskItemInContext ) {
        e.preventDefault();
        toggleMenuOn();
        positionMenu(e);
      } else {
        taskItemInContext = null;
        toggleMenuOff();
      }
    });
  }

  /**
   * Listens for click events.
   */
  function clickListener() {
    document.addEventListener( "click", function(e) {
      var clickeElIsLink = clickInsideElement( e, contextMenuLinkClassName );

      if ( clickeElIsLink ) {
        e.preventDefault();
        menuItemListener( clickeElIsLink );
      } else {
        var button = e.which || e.button;
        if ( button === 1 ) {
          toggleMenuOff();
        }
      }
    });
  }

  /**
   * Listens for keyup events.
   */
  function keyupListener() {
    window.onkeyup = function(e) {
      if ( e.keyCode === 27 ) {
        toggleMenuOff();
      }
    }
  }

  /**
   * Window resize event listener
   */
  function resizeListener() {
    window.onresize = function(e) {
      toggleMenuOff();
    };
  }

  /**
   * Turns the custom context menu on.
   */
  function toggleMenuOn() {
    if ( menuState !== 1 ) {
      menuState = 1;
      menu.classList.add( contextMenuActive );
    }
  }

  /**
   * Turns the custom context menu off.
   */
  function toggleMenuOff() {
    if ( menuState !== 0 ) {
      menuState = 0;
      menu.classList.remove( contextMenuActive );
    }
  }

  function positionMenu(e) {
    clickCoords = getPosition(e);
    clickCoordsX = clickCoords.x;
    clickCoordsY = clickCoords.y;
    menuWidth = menu.offsetWidth + 4;
    menuHeight = menu.offsetHeight + 4;

    windowWidth = window.innerWidth;
    windowHeight = window.innerHeight;

    if ( (windowWidth - clickCoordsX) < menuWidth ) {
      menu.style.left = (windowWidth - menuWidth)-0 + "px";
    } else {
      menu.style.left = clickCoordsX-0 + "px";
    }

    // menu.style.top = clickCoordsY + "px";

    if ( Math.abs(windowHeight - clickCoordsY) < menuHeight ) {
      menu.style.top = (windowHeight - menuHeight)-0 + "px";
    } else {
      menu.style.top = clickCoordsY-0 + "px";
    }
  }


  function menuItemListener( link ) {
    var menuSelectedPhotoId = taskItemInContext.getAttribute("data-id");
    console.log('Your Selected Photo: '+menuSelectedPhotoId)
    var moveToAlbumSelectedId = link.getAttribute("data-action");
    if(moveToAlbumSelectedId == 'remove'){
      console.log('You Clicked the remove button')
    }else if(moveToAlbumSelectedId && moveToAlbumSelectedId.length > 7){
      console.log('Clicked Album Name: '+moveToAlbumSelectedId);
    }
    toggleMenuOff();
  }
  initMenuFunction();

})();
/* For Body Padding and content */
body { padding-top: 70px; }
li a { text-decoration: none !important; }

/* Thumbnail only */
.thumb {
  margin-bottom: 30px;
}
.thumb:hover a, .thumb:active a, .thumb:focus a {
  border: 1px solid purple;
}

/************** For Context menu ***********/
/* context menu */
.context-menu {  display: none;  position: absolute;  z-index: 9999;  padding: 12px 0;  width: 200px;  background-color: #fff;  border: solid 1px #dfdfdf;  box-shadow: 1px 1px 2px #cfcfcf;  }
.context-menu--active {  display: block;  }

.context-menu__items { list-style: none;  margin: 0;  padding: 0;  }
.context-menu__item { display: block;  margin-bottom: 4px;  }
.context-menu__item:last-child {  margin-bottom: 0;  }
.context-menu__link {  display: block;  padding: 4px 12px;  color: #0066aa;  text-decoration: none;  }
.context-menu__link:hover {  color: #fff;  background-color: #0066aa;  }
.context-menu__items ul {  position: absolute;  white-space: nowrap;  z-index: 1;  left: -99999em;}
.context-menu__items > li:hover > ul {  left: auto;  padding-top: 5px  ;  min-width: 100%;  }
.context-menu__items > li li ul {  border-left:1px solid #fff;}
.context-menu__items > li li:hover > ul {  left: 100%;  top: -1px;  }
.context-menu__item ul { background-color: #ffffff; padding: 7px 11px;  list-style-type: none;  text-decoration: none; margin-left: 40px; }
.page-media .context-menu__items ul li { display: block; }
/************** For Context menu ***********/
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<body>



    <!-- Page Content -->
    <div class="container">

        <div class="row">

            <div class="col-lg-12">
                <h1 class="page-header">Thumbnail Gallery <small>(Right click to see the context menu)</small></h1>
            </div>

            <div class="col-lg-3 col-md-4 col-xs-6 thumb">
                <a class="thumbnail" href="#">
                    <img class="img-responsive" src="http://placehold.it/400x300" alt="">
                </a>
            </div>
            <div class="col-lg-3 col-md-4 col-xs-6 thumb">
                <a class="thumbnail" href="#">
                    <img class="img-responsive" src="http://placehold.it/400x300" alt="">
                </a>
            </div>
            <div class="col-lg-3 col-md-4 col-xs-6 thumb">
                <a class="thumbnail" href="#">
                    <img class="img-responsive" src="http://placehold.it/400x300" alt="">
                </a>
            </div>
            <div class="col-lg-3 col-md-4 col-xs-6 thumb">
                <a class="thumbnail" href="#">
                    <img class="img-responsive" src="http://placehold.it/400x300" alt="">
                </a>
            </div>
            <div class="col-lg-3 col-md-4 col-xs-6 thumb">
                <a class="thumbnail" href="#">
                    <img class="img-responsive" src="http://placehold.it/400x300" alt="">
                </a>
            </div>
            <div class="col-lg-3 col-md-4 col-xs-6 thumb">
                <a class="thumbnail" href="#">
                    <img class="img-responsive" src="http://placehold.it/400x300" alt="">
                </a>
            </div>
            <div class="col-lg-3 col-md-4 col-xs-6 thumb">
                <a class="thumbnail" href="#">
                    <img class="img-responsive" src="http://placehold.it/400x300" alt="">
                </a>
            </div>
            <div class="col-lg-3 col-md-4 col-xs-6 thumb">
                <a class="thumbnail" href="#">
                    <img class="img-responsive" src="http://placehold.it/400x300" alt="">
                </a>
            </div>

        </div>

        <hr>


    </div>
    <!-- /.container -->


    <!-- / The Context Menu -->
    <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="Delete This Photo"><i class="fa fa-empire"></i> Delete This Photo</a>
            </li>
            <li class="context-menu__item">
                <a href="#" class="context-menu__link" data-action="Photo Option 2"><i class="fa fa-envira"></i> Photo Option 2</a>
            </li>
            <li class="context-menu__item">
                <a href="#" class="context-menu__link" data-action="Photo Option 3"><i class="fa fa-first-order"></i> Photo Option 3</a>
            </li>
            <li class="context-menu__item">
                <a href="#" class="context-menu__link" data-action="Photo Option 4"><i class="fa fa-gitlab"></i> Photo Option 4</a>
            </li>
            <li class="context-menu__item">
                <a href="#" class="context-menu__link" data-action="Photo Option 5"><i class="fa fa-ioxhost"></i> Photo Option 5</a>
            </li>
            <li class="context-menu__item">
                <a href="#" class="context-menu__link"><i class="fa fa-arrow-right"></i> Add Photo to</a>
                <ul>
                    <li><a href="#!" class="context-menu__link" data-action="album-one"><i class="fa fa-camera-retro"></i> Album One</a></li>
                    <li><a href="#!" class="context-menu__link" data-action="album-two"><i class="fa fa-camera-retro"></i> Album Two</a></li>
                    <li><a href="#!" class="context-menu__link" data-action="album-three"><i class="fa fa-camera-retro"></i> Album Three</a></li>
                    <li><a href="#!" class="context-menu__link" data-action="album-four"><i class="fa fa-camera-retro"></i> Album Four</a></li>
                </ul>
            </li>
        </ul>
    </nav>

    <!-- End # Context Menu -->


</body>


वेनिला जेएस और एक स्वच्छ ले आउट का उपयोग करके महान काम!
कर्ट

3

ब्राउज़र के संदर्भ मेनू को ओवरराइड किया जा रहा है। किसी भी प्रमुख ब्राउज़र में मूल संदर्भ मेनू को बढ़ाने का कोई तरीका नहीं है।

चूंकि प्लगइन अपना स्वयं का मेनू बना रहा है, इसलिए केवल एकमात्र भाग जो वास्तव में अमूर्त है, वह ब्राउज़र का संदर्भ मेनू इवेंट है। प्लगइन आपके कॉन्फ़िगरेशन के आधार पर एक html मेनू बनाता है, फिर उस सामग्री को आपके क्लिक के स्थान पर रखता है।

हां, कस्टम संदर्भ मेनू बनाने के बारे में यह एकमात्र तरीका है। जाहिर है, अलग-अलग प्लगइन्स चीजों को थोड़ा अलग करते हैं, लेकिन वे सभी ब्राउज़र की घटना को ओवरराइड करेंगे और अपने स्वयं के HTML- आधारित मेनू को सही जगह पर रखेंगे।


2
बस यह उल्लेख करने के लिए कि फ़ायरफ़ॉक्स अब HTML5 देशी 'संदर्भ मेनू' (मार्कअप के माध्यम से घोषित) के लिए समर्थन जोड़ रहा है। यह अब फ़ायरफ़ॉक्स 8 बीटा में उपलब्ध है। ( developer.mozilla.org/en/Firefox_8_for_developers )।
पॉशहैगेसी

2

आप इस ट्यूटोरियल को देख सकते हैं: http://www.youtube.com/watch?v=iDyEfKWCzhg यह सुनिश्चित करें कि संदर्भ मेनू पहले छिपा हुआ है और इसमें निरपेक्ष स्थिति है। यह सुनिश्चित करेगा कि कई संदर्भ मेनू और संदर्भ मेनू का बेकार निर्माण नहीं होगा। पृष्ठ का लिंक YouTube वीडियो के विवरण में रखा गया है।

$(document).bind("contextmenu", function(event){
$("#contextmenu").css({"top": event.pageY +  "px", "left": event.pageX +  "px"}).show();
});
$(document).bind("click", function(){
$("#contextmenu").hide();
});

1

मुझे पता है कि यह भी पुराना है। मुझे हाल ही में एक संदर्भ मेनू बनाने की आवश्यकता थी जिसे मैं उन अन्य साइटों में इंजेक्ट करता हूं जिनके पास अलग-अलग गुण हैं n पर क्लिक किया गया तत्व।

यह बल्कि मोटा है, और इसे प्राप्त करने के लिए संभावित बेहतर तरीके हैं। यह यहाँ स्थित jQuery के संदर्भ मेनू लाइब्रेरी का उपयोग करता है

मुझे इसे बनाने में मज़ा आया और हालाँकि आप लोग इसका कुछ उपयोग कर सकते हैं।

यहाँ है बेला । मुझे उम्मीद है कि यह उम्मीद कर सकता है कि वहां कोई मदद कर सकता है।

$(function() {
  function createSomeMenu() {
    var all_array = '{';
    var x = event.clientX,
      y = event.clientY,
      elementMouseIsOver = document.elementFromPoint(x, y);
    if (elementMouseIsOver.closest('a')) {
      all_array += '"Link-Fold": {"name": "Link", "icon": "fa-external-link", "items": {"fold2-key1": {"name": "Open Site in New Tab"}, "fold2-key2": {"name": "Open Site in Split Tab"}, "fold2-key3": {"name": "Copy URL"}}},';
    }
    if (elementMouseIsOver.closest('img')) {
      all_array += '"Image-Fold": {"name": "Image","icon": "fa-picture-o","items": {"fold1-key1": {"name":"Download Image"},"fold1-key2": {"name": "Copy Image Location"},"fold1-key3": {"name": "Go To Image"}}},';
    }
    all_array += '"copy": {"name": "Copy","icon": "copy"},"paste": {"name": "Paste","icon": "paste"},"edit": {"name": "Edit HTML","icon": "fa-code"}}';
    return JSON.parse(all_array);
  }

  // setup context menu
  $.contextMenu({
    selector: 'body',
    build: function($trigger, e) {
      return {
        callback: function(key, options) {
          var m = "clicked: " + key;
          console.log(m);
        },
        items: createSomeMenu()
      };
    }
  });
});

0

मेरे पास बूटस्ट्रैप का उपयोग करके एक अच्छा और आसान कार्यान्वयन है जो निम्नानुसार है।

<select class="custom-select" id="list" multiple></select>

<div class="dropdown-menu" id="menu-right-click" style=>
    <h6 class="dropdown-header">Actions</h6>
    <a class="dropdown-item" href="" onclick="option1();">Option 1</a>
    <a class="dropdown-item" href="" onclick="option2();">Option 2</a>
</div>

<script>
    $("#menu-right-click").hide();

    $(document).on("contextmenu", "#list", function (e) {
        $("#menu-right-click")
            .css({
                position: 'absolute',
                left: e.pageX,
                top: e.pageY,
                display: 'block'
            })
        return false;
    });

    function option1() {
        // something you want...
        $("#menu-right-click").hide();
    }

    function option2() {
        // something else 
        $("#menu-right-click").hide();
    }
</script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.