1. 程式人生 > >對div實現右鍵彈出自定義選單

對div實現右鍵彈出自定義選單

實現只對藍色的Div彈出自定義選單,其他位置彈出預設的瀏覽器選單

js程式碼如下:

<script type="text/javascript">
  $(function(){
    var html='';
    html +='<div id="qj_box" class="widget" >';
    for(var i=0;i<10;i++){
      html += '<div id="box'+i+'" class="box" >'+i+'</div>';
    }
    html +='</div>';
    
    if($('#qj_box')[0] ==null ){
      $('body').append(html);
    }
    
    // 判斷滑鼠點選是由那個鍵觸發的,1是左鍵,2是滾輪鍵,3是右鍵
    $('.box').mousedown(function(event){       
      if(event.which==3){
        var itemId=$(this).attr('id');
        showMenu(itemId);
      }else{
        closeMenu();
      }
    });
    
    // 左鍵點選關閉自定義選單
    $(document).on('click',function(){
      closeMenu();
    });
  });
  
  // 遮蔽瀏覽器自帶的右鍵
  document.oncontextmenu=function(event){
    if($(event.target).attr('class')=='rk_menubox'){
      return false;
    }
  };
  
  // 彈出選單程式碼
  function showMenu(itemId){     
    var mhtml='<div id="rk_menubox" class="rk_menubox">' +
        '<div class="rk_menuitem" onclick="closeItem('+itemId+',1)">關閉此標籤</div> ' +
        '<div class="rk_menuitem" onclick="closeItem('+itemId+',2)">關閉其他標籤</div> ' +
        '<div class="rk_menuitem" onclick="closeItem('+itemId+',3)">關閉所有標籤</div>'+
        '</div>';
    
    if($('#rk_menubox')[0]==null){
      $('body').append(mhtml);
    }

    var evt=window.event || arguments[0];
    
    // 獲取滑鼠右鍵按下後的位置,據此定義選單顯示的位置
    var rightedge=$('#rk_menubox').width()+evt.clientX;
    
    // 判斷彈出的選單是否有溢位瀏覽器視窗的寬度
    if(rightedge>$(window).width()){
      var _left=evt.clientX-$('#rk_menubox').width();      
      $('#rk_menubox').css({top:evt.clientY+'px',left:_left+'px'});
    }else{
      $('#rk_menubox').css({top:evt.clientY+'px',left:evt.clientX+'px'});
    }    
  }
  
  function closeMenu(){
    if($('#rk_menubox')[0]!=null){
      $('#rk_menubox').remove();
    }
  }
  
  function closeItem(tag,opt){
    var tagid=$(tag).attr('id');
    if(opt==1){
      $('#qj_box').children().filter('div[id='+tagid+']').remove();
    }else if(opt==2){
      $('#qj_box').children().not('div[id='+tagid+']').remove();
    }else if(opt==3){
      $('#qj_box').children().remove();
    }
  }

</script> 

生成的html程式碼如下:

<body>
  <div id="qj_box" class="widget">
    <div id="box0" class="box">0</div>
    <div id="box1" class="box">1</div>
    <div id="box2" class="box">2</div>
    <div id="box3" class="box">3</div>
    <div id="box4" class="box">4</div>
    <div id="box5" class="box">5</div>
    <div id="box6" class="box">6</div>
    <div id="box7" class="box">7</div>
    <div id="box8" class="box">8</div>
    <div id="box9" class="box">9</div>
  </div>
</body>
樣式CSS程式碼如下:
.widget{display:inline-block;background:#ff9900;}
.box{width:50px;height:50px;background:#00b7ee;margin:5px;float:left;}
        
.rk_menubox{width:100px;border:1px solid #ddd;position:absolute;z-index:999;background:#fff;}
.rk_menuitem{line-height:20px;cursor:pointer;padding:0px 5px;}
.rk_menuitem:hover{background:#f4f4f4;}

========= 完結 ===========