วันนี้มาแบ่งปันการเพิ่มลูกเล่นให้กับเมนูด้านบนของเว็บกัน ^^ จริงๆ แล้วก็ชอบเป็นการส่วนตัวด้วยแหละ เพราะถ้าเราใช้ position: fixed ให้มันอยู่ด้านบนเลยแล้วมันดูขัดๆ ตา ก็อย่างว่าชอบใครชอบมันเนาะ เผื่อมีเพือนๆ ชอบเหมือนกัน
เทคนิคที่ใช้ก็จะมีการใช้ transition, transform และนำเอา javascript มาช่วยด้วย ลักษณะของลูกเล่นนี้ก็คือ ตอนที่เราเลื่อน scroll ลงก็ให้เมนูค่อยๆ ลอยหายขึ้นไปด้านบน แล้วพอเลื่อน scroll ขึ้น ก็ให้เมนูค่อยๆ ลอยลงมาครับ
มาดูโครงสร้าง HTML ของเมนูกันว่าเป็นยังไง ตอนนี้ก็มีแค่ลิงค์เดียวกดไปที่หน้าแรก ^^
<nav> <a href="/" title="IMOOH.COM">IMOOH.COM</a> </nav>
ส่วน CSS ของเมนูก็จะประมาณนี้ครับ
nav {
height: 45px;
width: 100%;
background: rgba(255, 255, 255, 0.97);
box-shadow: 0 0 2px rgba(0, 0, 0, 0.15);
position: fixed;
font-weight: bold;
top: 0px;
left: 0px;
-ms-transition: 1s;
-webkit-transition: 1s;
transition: 1s;
}
.nav-hidden {
-ms-transform: translateY(-45px);
-webkit-transform: translateY(-45px);
transform: translateY(-45px);
}
nav a {
margin: 7px 10px 10px;
color: #000;
font-size: 1.5em;
font-weight: bold;
display: inline-block;
}
transform ด้วย translateY บอกว่าให้แกน Y ขยับขึ้นไป 45px ซึ่งจะเท่ากับขนาดความสูงของ nav พอเราใส่ .nav-hidden เข้าไปให้ nav ก็จะทำให้ nav หายขึ้นไปด้านบนครับ
transition เอามาคุมความเร็วของเมนูตอนที่ลอยขึ้นไป ไม่ให้หายขึ้นไปเลยทันทีให้คนอ่านเห็นการเปลี่ยนแปลงด้วย ^^
จากนั้นก็ใช้ jquery มาช่วยในจังหวะที่มีการเลื่อน scroll ขึ้น-ลง
scrollIndex=0
$(window).scroll(function() {
if(scrollIndex < window.scrollY) {
$('nav').addClass('nav-hidden');
}else{
$('nav').removeClass('nav-hidden');
}
scrollIndex = window.scrollY
});
จริงๆ ตอนแรกใช้ toggleClass เลย ไม่มีการเก็บตำแหน่งของแกน Y ไว้อ้างอิง พอมีการเลื่อน scroll ทำให้มีการเพิ่มและลบคลาส .nav-hidden ตลอดเวลาไม่เห็นการเปลี่ยนแปลงคือเมนูลองอยู่นิ่งๆ ไม่หายไปไหน ก็เลยต้องมีการเก็บตำแหน่งล่าสุดของ scrollY ไว้ด้วยจะได้เอามาเปรียบเทียบได้ว่าขึ้นหรือลง ทำให้การทำงานตรงตามที่คิดไว้หน่อย ^^