আমার ওয়েব-অ্যাপ্লিকেশনটির জন্য কাস্টম রাইট-ক্লিক প্রসঙ্গে মেনু তৈরি করা


127

গুগল-ডক্স এবং ম্যাপ-কোয়েস্টের মতো কয়েকটি ওয়েবসাইট আমার আছে যেখানে আপনি ডান ক্লিক করলে কাস্টম ড্রপ ডাউন মেনু থাকে। কোনওভাবে তারা ড্রপ-ডাউন মেনুতে ব্রাউজারের আচরণকে ওভাররাইড করে এবং আমি এখন নিশ্চিত যে তারা এটি কীভাবে করে। আমি এমন একটি jQuery প্লাগইন পেয়েছি যা এটি করে তবে আমি কয়েকটি বিষয় সম্পর্কে এখনও আগ্রহী:

  • কিভাবে কাজ করে? ব্রাউজারের ড্রপ-ডাউন মেনুটি কি আসলে ওভাররাইড করা হচ্ছে, বা এর প্রভাবটি কেবল সিমুলেটেড? যদি তাই হয়, কিভাবে?
  • প্লাগইন বিমূর্ত দূরে কি? পর্দার আড়ালে কী চলছে?
  • এটি কি এই প্রভাব অর্জনের একমাত্র উপায়?

কাস্টম প্রসঙ্গ মেনু চিত্র

কার্যক্রমে বেশ কয়েকটি কাস্টম-প্রসঙ্গ মেনু দেখুন

উত্তর:


219

আমি জানি এই প্রশ্নটি অনেক পুরানো, তবে কেবল একই সমস্যাটি নিয়ে এসে এটি সমাধান করেছি, সুতরাং গুগলের মাধ্যমে যে কেউ আমার মতো করে এটি খুঁজে পাবে আমি তার উত্তর দিচ্ছি। আমি আমার সমাধান @ অ্যান্ড্রু এর একটিতে ভিত্তিক করেছিলাম, তবে মূলত পরে সমস্ত কিছু সংশোধন করেছি।

সম্পাদনা : ইদানীং এটি কতটা জনপ্রিয় হয়েছে তা দেখে, আমি এটিকে আরও 2014 এর মতো এবং উইন্ডো 95 এর মতো দেখতে আরও শৈলীর আপডেট করার সিদ্ধান্ত নিয়েছি @

সম্পাদনা 2 : আমি এটি স্ট্যাক স্নিপেটস দিয়ে সেট আপ করেছি কারণ তারা সত্যিই দুর্দান্ত একটি নতুন বৈশিষ্ট্য। আমি এখানে রেফারেন্স চিন্তার জন্য ভাল জিসফিল রেখেছি (তাদের কাজ দেখতে 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

দ্রষ্টব্য: আপনি কিছু ছোট বাগ দেখতে পাচ্ছেন (কার্সার থেকে অনেক দূরে ড্রপডাউন ইত্যাদি), দয়া করে নিশ্চিত করুন যে এটি জেসফিডেলে কাজ করে , কারণ এটি স্ট্যাকস্নিপেটের চেয়ে আপনার ওয়েবপৃষ্ঠার সাথে আরও সাদৃশ্যপূর্ণ।


1
আমি মনে করি আপনার মাউসডাউনটি নিয়ে কোনও সমস্যা থাকতে পারে। এটি কোনও রেসের অবস্থার কারণ হতে পারে, যেহেতু মেনু আইটেমটিতে ক্লিক করা একটি ক্লিককে ট্রিগার করে যা একটি মোডাউন এবং মাউস আপ।
কোয়ান্টিকো

2
ধন্যবাদ @ কোয়ান্টিকো, এটি সত্য এবং এখন এটি কোড এবং জেএসফিডাল উভয়ই স্থির করা উচিত। অন্য কোন সমস্যা? সিডিনোট: বাহ, 170 টি পূর্ববর্তী সম্পাদনাগুলি জেসফিডেলে, এটি অবশ্যই জনপ্রিয় হয়েছিল।
ফ্রান্সিসকো প্রেজেনসিয়া

1
নতুন ফিডলটি ব্যবহার করার সময়, আপনি যদি পৃষ্ঠায় অন্য কোনও এইচটিএমএল উপাদান ব্যবহার করেন তবে পপআপটি স্বচ্ছ প্রদর্শিত হয়। সম্পাদনা: CSS এ ব্যাকগ্রাউন্ড রঙ যুক্ত করা এটি সমাধান করে।
হলোওয়ে

1
অন্য একটি ছোটখাটো সমস্যা: মেনুটি দৃশ্যমান হওয়ার সময় আপনি যদি ডানদিকে ক্লিক করেন, এটি দেখানোর আগে এটি ফ্লিকার করে। আমার মনে হয় এটি লুকিয়ে রাখা উচিত (ডিফল্টের মতো) বা লুকানো এবং তারপরে নতুন অবস্থানে উপস্থিত হওয়া উচিত।
ফাঁকা 15

@ChetanJoshi এটা মত মনে হয় MDN অনুযায়ী 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 এর সঙ্গে গুরুত্বপূর্ণ বিষয় অন্তর্ভুক্ত করা হয় z-indexএবংposition: absolute

একটি চটজলদি jQuery প্লাগইনে এই সমস্ত মোড়ানো খুব কঠিন হবে না।

আপনি এখানে একটি সাধারণ ডেমো দেখতে পারেন: http://jsfiddle.net/andrew whitaker / fELma/


আমি মনে করি এই প্রসঙ্গ মেনুটি যদি ব্যবহারকারী এর ভিতরে ক্লিক করে খোলা থাকে (তবে ব্যবহারকারী যখন এটির বাইরে ক্লিক করেন) তখন এটি বেশি কার্যকর হবে। এটি এভাবে কাজ করার জন্য সংশোধন করা যেতে পারে?
অ্যান্ডারসন সবুজ

2
event.targetক্লিকের বাইন্ডিংটির ভিতরে আপনি দেখতে পাবেন document। যদি এটি প্রসঙ্গ মেনুর ভিতরে না থাকে তবে মেনুটি আড়াল করুন: jsfiddle.net/fELma/286
অ্যান্ড্রু হুইটেকার

2
আমি এটিকে কিছুটা সংশোধন করেছি (যাতে এটি একাধিক মেনু একবারে দেখাতে বাধা দেয়): jsfiddle.net/fELma/287
অ্যান্ডারসন গ্রিন

আমি একটি রেডিয়াল রাইট-ক্লিক প্রসঙ্গ মেনু তৈরি করার চেষ্টা করছি (যেমন এখানে রয়েছে: পুশিং- pixels.org/wp-content/uploads/2012/07/… )। এটি সম্পর্কে কীভাবে যেতে হবে তা বোঝার জন্য এটি দুর্দান্ত শুরু thanks
বরিস

@ অ্যান্ড্রুউইটেকার আপনার উত্তর বলছে এটি পুরো নথিতে প্রয়োগ করা হবে। যদি আমি এটি কোনও নির্দিষ্ট নিয়ন্ত্রণে প্রয়োগ করতে চাই, উদাহরণস্বরূপ, একটি বোতাম (এর আইডিটি বোতাম 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

জাভাস্ক্রিপ্টে রাইট ক্লিকের প্রসঙ্গ মেনুর জন্য এখানে একটি উদাহরণ রয়েছে: রাইট ক্লিক প্রসঙ্গে মেনু Click

প্রসঙ্গ মেনু কার্যকারিতা জন্য কাঁচা জাভাস্ক্রিপ্ট কোড ব্যবহৃত। আপনি দয়া করে এটি পরীক্ষা করতে পারেন, আশা করি এটি আপনাকে সহায়তা করবে।

লাইভ কোড:

(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

ব্রাউজারের প্রসঙ্গ মেনুটি ওভাররাইড করা হচ্ছে। কোনও বড় ব্রাউজারে নেটিভ প্রসঙ্গ মেনু বাড়ানোর কোনও উপায় নেই।

যেহেতু প্লাগইনটি নিজস্ব মেনু তৈরি করছে, তাই কেবলমাত্র অংশটি বিমূর্ত করা ব্রাউজারের প্রসঙ্গ মেনু ইভেন্ট। প্লাগইনটি আপনার কনফিগারেশনের উপর ভিত্তি করে একটি এইচটিএমএল মেনু তৈরি করে, তারপরে সেই লিখিত সামগ্রীটি আপনার ক্লিকের স্থানে রাখে।

হ্যাঁ, একটি কাস্টম প্রসঙ্গ মেনু তৈরি করার একমাত্র উপায় এটি। স্পষ্টতই, বিভিন্ন প্লাগইনগুলি কিছুটা আলাদা করে, তবে তারা সকলেই ব্রাউজারের ইভেন্টটিকে ওভাররাইড করে এবং তাদের নিজস্ব এইচটিএমএল-ভিত্তিক মেনুটি সঠিক জায়গায় রাখবে।


2
কেবল উল্লেখ করার জন্য যে ফায়ারফক্স এখন HTML5 নেটিভ 'কনটেক্সট মেনু' (মার্কআপের মাধ্যমে ঘোষিত) জন্য সমর্থন যোগ করছে for এটি এখন ফায়ারফক্স 8 বিটাতে উপলব্ধ। ( বিকাশকারী.মোজিলা.আর.ইন / ফায়ারফক্স_৮_ফর্ম_ডিভলপার্স )।
poshaughnessy

2

আপনি এই টিউটোরিয়ালটি দেখতে পারেন: http://www.youtube.com/watch?v=iDyEfKWCzhg কনফেক্সট মেনুটি প্রথমে লুকানো আছে এবং তার পরম অবস্থান রয়েছে তা নিশ্চিত করুন। এটি নিশ্চিত করবে যে একাধিক প্রসঙ্গ মেনু এবং প্রসঙ্গ মেনুটির অকেজো সৃষ্টি হবে না। পৃষ্ঠার লিঙ্কটি ইউটিউব ভিডিওর বর্ণনায় রাখা হয়েছে।

$(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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.