การเขียนเว็บแอพพลิเคชั่น สิ่งหนึ่งที่หลีกเลี่ยงไม่ค่อยจะพ้น ก็คือเมนู การสร้างเมนูนั้นโดยปกติแล้วเราจะใช้เลเยอร์ในการสร้าง (ถ้าสร้างเองนะ) และก็มักจะติดปัญหาเรื่อง เมนูที่สร้างไปอยู่ใต้ลิสต์บ้อก มันไม่ยอมอยู่ข้างบน และอีกปัญหาหนึ่งก็คือใช้เวลาในการทำมาก อีกทั้งไม่ค่อยจะสวย

วันนี้ผมเลยมาแนะนำ ปลั๊กอินของ jQuery ที่ใช้สำหรับสร้างเมนูโดยเฉพาะ ทั้งใช้ง่าย สวยงาม และไม่ต้องเสียเวลานานๆในการเขียนเอง

ปลักอินตัวนี้ชื่อ superfish ลองดูตัวอย่าง และภาพที่มีคนนำปลั๊กอินตัวนี้ไปปรับแต่งใช้งาน กระตุ้นต่อมอยากในริดสีดวงกันเสียก่อน

Live Demo

ทีนี้เรามาดูวิธีการใช้งานกัน

1. ก่อนอื่นก็ต้องดาวน์โหลดไฟล์ที่จำเป็นกันก่อนละครับ Superfish-1.4.8.zip

2. เริ่มเขียนโปรแกรมเรียกใช้งานกันครับ
เริ่มจาก include ไฟล์ที่จำเป็นเข้ามา

<link rel="stylesheet" type="text/css" href="css/superfish.css" media="screen">
<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="js/hoverIntent.js"></script>
<script type="text/javascript" src="js/jquery.bgiframe.min.js"></script>
<script type="text/javascript" src="js/superfish.js"></script>

สองบรรทัดนี้จะเป็นตัวที่ทำให้เมนูไม่ถูกลิสต์บ้อกทับ

<script type="text/javascript" src="js/hoverIntent.js"></script>
<script type="text/javascript" src="js/jquery.bgiframe.min.js"></script>

จากนั้นก็เขียนโครงสร้าง html ซึ่งเราใช้แท็ก ul เป็นตัวสร้าง

<ul class="sf-menu">
 
  <!-- no have sub menu-->
  <li><a href="#">Main menu item #1</a></li>
 
  <!-- have sub menu-->
  <li class="current"><a href="#a">Main menu item #2</a>
    <ul>
      <li><a href="#aa">Sub menu item #2-1</a></li>
      <li><a href="#aa">Sub menu item #2-2</a></li>
      <li><a href="#aa">Sub menu item #2-3</a></li>
    </ul>
  </li>
 
</ul>

ใส่ class=”sf-menu” ให้ ul ด้วยเราจะได้อ้างอิงถึงตัวมันได้ ในกรณีที่ท่านต้องการทำให้มีเมนูย่อย ท่านสามารถใส่ ul ซ้อนเข้าไปใน li เมนูย่อยสามารถสร้างสักกี่ลำดับชั้นก็ได้ ไม่จำกัด

เสร็จแล้วขั้นตอนต่อไปก็เรียกใช้ปลั๊กอิน ทำให้แท็ก ul ของเรากลายเป็นเมนู อันงดงาม

<script type="text/javascript">
    $(document).ready(function(){ 
        $(".sf-menu").superfish().find('ul').bgIframe({opacity:false}); 
    }); 
</script>

ด้วยขั้นตอนเพียงง่ายๆเท่านี้ ท่านก็จะมีเมนูอันสวยงามใช้งาน แล้วเราจะนั่งเขียนโค้ดเองด้วย javascript ให้ปวดริดสีดวงทำไม

โค้ดทั้งหมด

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Superfish menu</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="css/superfish.css" media="screen">
<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="js/hoverIntent.js"></script>
<script type="text/javascript" src="js/jquery.bgiframe.min.js"></script>
<script type="text/javascript" src="js/superfish.js"></script>
<script type="text/javascript">
    $(document).ready(function(){ 
        $(".sf-menu").superfish().find('ul').bgIframe({opacity:false}); 
    }); 
</script>
</head>
<body>
<ul class="sf-menu">
 
  <!-- no have sub menu-->
  <li><a href="#">Main menu item #1</a></li>
 
  <!-- have sub menu-->
  <li class="current"><a href="#a">Main menu item #2</a>
    <ul>
      <li><a href="#aa">Sub menu item #2-1</a></li>
      <li><a href="#aa">Sub menu item #2-2</a></li>
      <li><a href="#aa">Sub menu item #2-3</a></li>
    </ul>
  </li>
 
</ul>
</body>
</html>

เอาละครับผมจะแนะนำวิธีการปรับแต่งตัวเมนูสักเล็กน้อย การปรับแต่งทั้งหมดท่านสามารถทำได้ที่ไฟล์ css\superfish.css

วิธีการปรับความกว้างของเมนู

.sf-menu ul {
	position:		absolute;
	top:			-999em;
	width:		10em; /* left offset of submenus need to match (see below) */
}
.
.
.
ul.sf-menu li li.sfHover ul {
	left:			10em; /* match ul width */
	top:			0;
}

แก้ width ให้กว้างเท่าที่ท่านต้องการ เช่น width:15em; และเมื่อท่านแก้ width แล้วท่านต้องแก้ left ให้มีค่าเท่ากัน left:15em;

ข้อมูลเพิ่มเติม : jQuery superfish plugin