วิธีทำ Fully Expand เมนูหลักแบบเต็มหน้าจอ

bootstrap-fully-expand-เมนู-2
bootstrap-fully-expand-เมนู-2

วิธีทำ Fully Expand เมนูหลักแบบเต็มหน้าจอด้วย Bootstrap Framework


ดูตัวอย่าง Fully Expand Menu

Fully Expand Menu คือเมนูที่เมื่อเรา Click หรือ Hover การแสดงผลจะแสดงเป็นแผ่นแบบเต็มหน้าจอและในแผ่นนั้นจะมีเนื้อหาต่าง ๆ อาจจะเป็นข้อความ รูปภาพหรือลิงค์เมนูย่อย เมนูแบบ Fully Expand นอกจากจะเป็นที่นิยมใช้กันทั่วไปในปัจจุบันแล้วยังมีประโยชน์เรื่องของการพัฒนาเว็บไซต์แบบเน้น UX หรือ User Experience อีกด้วย การใช้เมนูในลักษณะนี้

เป็นการเพิ่มการเชื่อมโยงลิงค์ภายในเว็บไซต์พร้อมทั้งอธิบายเนื้อหาที่สัมพันธ์กันกับลิงค์เพื่อให้ผู้ใช้งานรู้ก่อนว่าลิงค์ที่จะคลิกเข้าไปจะเจอเนื้อหาเกี่ยวกับอะไร Expand Menu มีความคล้ายคลึงกับ Sub Menu เพียงแต่สามารถให้ข้อมูลที่มากกว่าและหลากหลายกว่านั่นเอง

เตรียมความพร้อมดาวน์โหลด Bootstrap

ในบทความนี้จะใช้ Bootstrap Framework ในการทำ Expand Menu เพราะฉะนั้นเริ่มต้นให้เราไปดาวน์โหลด Bootstrap Framework ได้ที่เว็บไซต์ getbootstrap.com เมื่อดาวน์โหลดไฟล์มาแล้วให้สร้างไฟล์ index.html และทำการ include เรียกใช้งาน css และ javascript ดังนี้


index.html
เรียกใช้งานไฟล์ .css หลักของ bootstrap framework

<link rel="stylesheet" href="css/bootstrap.min.css">

เรียกใช้งาน jQuery และไฟล์ .js ของ Bootstrap framework

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>

จากนั้นในส่วนของ body ให้เราสร้าง html โดยใช้ class ต่าง ๆ ตามความสามารถของ bootstrap ดังนี้ครับ

<div class="navbar navbar-default">
  <ul class="nav navbar-nav">
    <li class="dropdown active"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">หน้าแรก <span class="caret"></span></a>
      <ul class="dropdown-menu" role="menu">
        <li>
            <div class="content">สร้าง Content เพิ่มในส่วนนี้</div>
        </li>
      </ul>
    </li>
    <li><a href="#">ผลิตภัณฑ์</a></li>
  </ul>
</div>

จากตัวอย่าง html code ด้านบนจะยังไม่สามารถใช้งาน expand menu ได้ เหตุผลเพราะว่าค่าเริ่มต้นของ bootstrap สำหรับ dropdown menu จะไม่ได้แสดงผลแบบ full width หรือเต็มหน้าจอแต่จะแสดงผลตามขนาดของเนื้อหาด้านใน ซึ่งเนื้อหาด้านใน จากตัวอย่างด้านบนคือคลาส content ซึ่งจะเป็นส่วนที่ใช้แสดงผลข้อมูลทั้งรูปภาพและข้อความเมื่อมีการ click หรือ hover ที่เมนูนั้น ๆ

ปรับปรุง CSS ต้นแบบของ Bootstrap ให้ Full Width

CSS เริ่มต้นของคลาส dropdown ใน Bootstrap จะแสดงความกว้างเท่ากับขนาดของเมนูนั้น ๆ เราสามารถปรับขนาดของคลาส dropdown เพื่อให้แสดงผลแบบ full width ได้โดยสามารถเขียนได้ดังนี้ครับ

<style>
.nav > li.dropdown {
	position: static;
}
.nav > li.dropdown .dropdown-menu {
	width:100%;
	text-align: left;
	left:0;
	right:0;
}
.nav > li.dropdown.open {
	position: static;
}
.nav > li.dropdown.open .dropdown-menu {
	text-align: left;
	left:0;
	right:0;
}
.dropdown-menu>li {
	height:350px;
}
.content{
	padding:30px;	
}
</style>


เพิ่ม Slide Effect ให้กับ Expand Menu

จากโค๊ดด้านบน ถ้าเราลองทดสอบดูจะเห็นว่าสามารถใช้งาน Expand Menu ได้แล้ว แต่ก็เป็นการ Expand แบบทื่อ ๆ คือคลิกก็แสดงเลยเพราะจะหายไปก็หายไปเลย ไม่มีการ Slide หรือ Fade ส่วนนี้เราสามารถเพิ่ม Effect ได้โดยการเขียน Javascript เพิ่มเข้าไปได้ดังนี้ครับ

$('.dropdown').on('show.bs.dropdown', function(e){
    $(this).find('.dropdown-menu').first().stop(true, true).slideDown();
});

$('.dropdown').on('hide.bs.dropdown', function(e){
    $(this).find('.dropdown-menu').first().stop(true, true).slideUp();	
});

เพียงเท่านี้เราก็จะได้ fully expand menu ที่มีการสไลด์ตั้งตอนเปิดและปิดเมนูแล้วครับ ส่วนเนื้อหาในเมนูเราสามารถเขียนเพิ่มเข้าไปภายใน div คลาสที่ชื่อว่า content ได้เลยครับ ดูตัวอย่างการทำงานด้านล่างครับ


เพิ่มเติมนะครับ การทำ effect แบบ SlideDown และ SlideUp เป็นการใช้ความสามารถร่วมกันระหว่าง jQuery และ bootstrap framework คือใช้ Event ของ bootstrap และใช้คำสั่ง เลื่อนขึ้น-ลง ของ jQuery นั่นเป็นเหตุผลทำให้เราสามารถเปลี่ยนรูปแบบ effect เป็นแบบอื่นได้เช่นเปลี่ยนจาก slide effect เป็น fade effect ตัวอย่างเช่น

$(this).find('.dropdown-menu').first().stop(true, true).fadeIn("fast");
$(this).find('.dropdown-menu').first().stop(true, true).fadeOut("fast");

ท่านสามารถดูตัวอย่างการทำงานของ expand menu และตัวอย่างโค๊ดทั้งหมดได้ที่ลิงค์ด้านล่างครับ

ดูตัวอย่าง Fully Expand Menu