自定義右鍵導航選單程式碼例項

antzone發表於2017-03-03

右鍵選單大家都不會陌生,因為windows作業系統有大量應用,幾乎每天都會使用,但是自帶的選單也許不能夠滿足我們的需要,所以要進行自定義才能夠滿足實際應用,程式碼例項如下:

[HTML] 純文字檢視 複製程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
*{font-size:12px}
#mask{
  position:absolute;
  left:0;
  top:0;
  z-index:9000;
  display:block;
}
#myMenu{
  position:absolute;
  display:none;
  z-index:9999;
  background:yellow;
  border:1px solid;
  width:70px;
  height:120px;
}
#textbox{
  background:orange;
  width:380px;
  border:2px solid;
}
img{
  height:30px;
  width:30px;
}
td{
  font-size:20px;
  cursor:pointer;
}
a{
  text-decoration:none;
  color:black;
}
a: hover{
  color:white;
  background:black;
}
</style>
<script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript">
var windowwidth;
var windowheight;
var checkmenu;
$(window).ready(function(){
  $('#myMenu').hide();
  $('#textbox').bind("contextmenu",function(e){
    windowwidth = $(window).width();
    windowheight = $(window).height();
    checkmenu = 1;
    $('#mask').css({
      'height': windowheight,
      'width': windowwidth
    });
    $('#myMenu').show(500);  
    $('#myMenu').css({
      'top':e.pageY+'px',
      'left':e.pageX+'px'
    });
    return false;
  });
  $('#mask').click(function(){
    $(this).height(0);
    $(this).width(0);
    $('#myMenu').hide(500);
    checkmenu = 0;
    return false;
  });
  $('#mask').bind("contextmenu",function(){
    $(this).height(0);
    $(this).width(0);
    $('#myMenu').hide(500);
    checkmenu = 0;
    return false;
  });
  $(window).resize(function(){
    if(checkmenu == 1) 
    {
      windowwidth = $(window).width();
      windowheight = $(window).height();
      $('#mask').css({
        'height': windowheight,
        'width': windowwidth,
      });
    }
  });
});
</script>
</head>
<body >
<div id="myMenu" >
  <table>
    <tr>
      <td><a href="#">js教程</a></td>
    </tr>
    <tr>
      <td><a href="#">jQuery教程</a></td>
    </tr>
    <tr>
      <td><a href="#">css教程</a></td>
    </tr>
    <tr>
      <td><a href="#">螞蟻部落</a></td>
    </tr>
  </table>
</div>
<div id="mask"> </div>
<div id="textbox">
  <p>右擊此區域可以檢視右鍵選單<p/>
</div>
</body>
</html>

以上程式碼實現了我們的要求,當右擊指定區域的時候能夠彈出自定義選單,下面介紹一下實現過程:

一.程式碼註釋:

1.var windowwidth,宣告一個變數用來儲存視窗的寬度。

2.var windowheight,宣告一個變數用來儲存視窗的高度。

3.var checkmenu,宣告一個用來標識自定選單是否已經彈出。

4.$(window).ready(function(){}),當文件結構結構完全載入完畢再去執行函式中的程式碼。

5.$('#myMenu').hide(),預設情況下自定義選單是處於隱藏狀態的。

6.$('#textbox').bind("contextmenu",function(e){}),為textbox元素註冊右鍵選單事件。

7.windowwidth=$(window).width(),將視窗的寬度存入變數windowwidth。

8.windowheight=$(window).height(),將視窗的高度存入變數windowheight。

9.checkmenu=1,將此變數的值設定為1,說明自定義右鍵選單已經彈出。

10.$('#mask').css({'height': windowheight,'width': windowwidth}),設定一個全屏的遮罩層,這個遮罩層的作用是為讓右鍵功能僅限於指定元素,防止出現wnindow自定義的右鍵選單。

11.$('#myMenu').show(500),以動畫方式顯示右鍵選單。

12.$('#myMenu').css({'top':e.pageY+'px','left':e.pageX+'px'}),設定右鍵選單的左上角的座標。

13.return false,這個程式碼非常的重要,不但可以阻止當前元素的預設行為,也就是彈出window的選單,也可以阻止事件冒泡,防止父級元素出現winow自帶的選單。

14.$('#mask').click(function(){}),為遮罩層註冊click事件處理函式,此事件處理函式的作用是將遮罩層尺寸設定為0,並且隱藏右鍵選單,並將標識設定為0。

15.$('#mask').bind("contextmenu",function(){}),同樣註冊右鍵事件,但是這裡是為了防止window選單彈出,好隱藏自定義選單。

16.$(window).resize(function(){}),註冊resize事件處理函式,此事件會在調整視窗大小時觸發。

17.if(checkmenu==1) ,如果自定義選單已經彈出。

18.windowwidth=$(window).width(),獲取視窗的大小並賦值個變數windowwidth。

19.windowheight=$(window).height(),道理同上。

20.$('#mask').css({'height': windowheight,'width': windowwidth,}),重新設定遮罩層的尺寸,否則調整視窗大小的時候可能會出現滾動條。

二.相關閱讀:

1.hide()函式可以參閱jQuery hide()一章節。 

2.width()函式可以參閱jQuery width()一章節。 

3.css()函式可以參閱jQuery css()一章節。

4.show()函式可以參閱jQuery show()一章節。

5.pageY屬性可以參閱jQuery event.pageY一章節。

6.事件冒泡可以參閱什麼是jquery事件冒泡一章節。 

相關文章