การเขียนเว็บแอพพลิเคชั่น สิ่งหนึ่งที่หลีกเลี่ยงไม่ค่อยจะพ้น ก็คือเมนู การสร้างเมนูนั้นโดยปกติแล้วเราจะใช้เลเยอร์ในการสร้าง (ถ้าสร้างเองนะ) และก็มักจะติดปัญหาเรื่อง เมนูที่สร้างไปอยู่ใต้ลิสต์บ้อก มันไม่ยอมอยู่ข้างบน และอีกปัญหาหนึ่งก็คือใช้เวลาในการทำมาก อีกทั้งไม่ค่อยจะสวย
วันนี้ผมเลยมาแนะนำ ปลั๊กอินของ jQuery ที่ใช้สำหรับสร้างเมนูโดยเฉพาะ ทั้งใช้ง่าย สวยงาม และไม่ต้องเสียเวลานานๆในการเขียนเอง
ปลักอินตัวนี้ชื่อ superfish ลองดูตัวอย่าง และภาพที่มีคนนำปลั๊กอินตัวนี้ไปปรับแต่งใช้งาน กระตุ้นต่อมอยากในริดสีดวงกันเสียก่อน
ทีนี้เรามาดูวิธีการใช้งานกัน
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
minddezign says:
23/12/2552 at 23/12/2552
อันนี้แจ๋วมากๆครับ
kongtoonarmy says:
24/12/2552 at 24/12/2552
สุดยอดครับ เคยนั่งเขียนเองอยู่พักหนึ่ง
เวลาเจอไฟล์ flash นี่โดนทับประจำ
p1i3c1h says:
29/12/2552 at 29/12/2552
ขอบคุณครับ Bookmark ไว้เลย เป็นประโยชน์มากๆเลยครับ
บอย says:
05/01/2553 at 05/01/2553
ดีเลย ie6 ก็ใช้ได้สบายเลย
Bowwy says:
03/02/2553 at 03/02/2553
เยี่ยมเลยค่ะ
koii says:
17/10/2553 at 17/10/2553
flash ก็ยังทับอยู่ค่ะ แก้ ก็ไม่หายค่ะ ต้องแก้ที่ไหนคะ