Tạo custom context menu với jQuery và CSS

15 Likes Comment
custom_menu

Bài viết hướng dẫn tạo context menu riêng cho trang web thay cho context menu mặc định của trình duyệt. Cách tạo cũng khá là đơn giản nhờ sử dụng jQuery và việc thay đổi style của context menu chỉ cần thông qua CSS.

Hướng dẫn cách tạo:
  1. Tạo danh sách các mục có trong context menu bằng một unordered html list:
    <ul class="contextmenu">
      <li><a href="#">Home</a></li>
      <li><a href="#">jQuery Plugins</a></li>
      <li><a href="#">Vue.js Components</a></li>
      <li><a href="#">Angular Directives</a></li>
      <li><a href="#">ReactJS Components</a></li>
    </ul>
  2. Thay đổi style của context menu theo ý bạn:
    .contextmenu {
      display: none;
      position: absolute;
      width: 200px;
      margin: 0;
      padding: 0;
      background: #FFFFFF;
      border-radius: 5px;
      list-style: none;
      box-shadow: 0 15px 35px rgba(50,50,90,0.1),  0 5px 15px rgba(0,0,0,0.07);
      overflow: hidden;
      z-index: 999999;
    }
    
    .contextmenu li {
      border-left: 3px solid transparent;
      transition: ease .2s;
    }
    
    .contextmenu li a {
      display: block;
      padding: 10px;
      color: #B0BEC5;
      text-decoration: none;
      transition: ease .2s;
    }
    
    .contextmenu li:hover {
      background: #CE9<a href="https://www.jqueryscript.net/tags.php?/3D/">3D</a>8;
      border-left: 3px solid #9C27B0;
    }
    
    .contextmenu li:hover a { color: #FFFFFF; }
  3. Thêm thư viện jQuery:
    <script src="//code.jquery.com/jquery-3.2.1.slim.min.js"></script>
  4. Phần jQuery thêm vào để có thể thay thế context menu mặc định của trình duyệt bằng context menu đã tạo ở trên:
    $(document).ready(function(){
    
      //Show contextmenu:
      $(document).contextmenu(function(e){
        //Get window size:
        var winWidth = $(document).width();
        var winHeight = $(document).height();
        //Get pointer position:
        var posX = e.pageX;
        var posY = e.pageY;
        //Get contextmenu size:
        var menuWidth = $(".contextmenu").width();
        var menuHeight = $(".contextmenu").height();
        //Security margin:
        var secMargin = 10;
        //Prevent page overflow:
        if(posX + menuWidth + secMargin >= winWidth
        && posY + menuHeight + secMargin >= winHeight){
          //Case 1: right-bottom overflow:
          posLeft = posX - menuWidth - secMargin + "px";
          posTop = posY - menuHeight - secMargin + "px";
        }
        else if(posX + menuWidth + secMargin >= winWidth){
          //Case 2: right overflow:
          posLeft = posX - menuWidth - secMargin + "px";
          posTop = posY + secMargin + "px";
        }
        else if(posY + menuHeight + secMargin >= winHeight){
          //Case 3: bottom overflow:
          posLeft = posX + secMargin + "px";
          posTop = posY - menuHeight - secMargin + "px";
        }
        else {
          //Case 4: default values:
          posLeft = posX + secMargin + "px";
          posTop = posY + secMargin + "px";
        };
        //Display contextmenu:
        $(".contextmenu").css({
          "left": posLeft,
          "top": posTop
        }).show();
        //Prevent browser default contextmenu.
        return false;
      });
    
      //Hide contextmenu:
      $(document).click(function(){
        $(".contextmenu").hide();
      });
    
    });
  5. Như vậy là đã hoàn thành việc tùy chỉnh context menu, đây là thành quả:

    Nếu bạn muốn tạo ra context menu lung linh hơn:

Các bạn có thể xem demo và download ở đây

Nguồn: https://www.jqueryscript.net/menu/Context-Menu-jQuery-CSS.html

You might like

About the Author: Sharescript.net

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *