Tạo menu cố định khi scroll chuột

Vào lúc 7:24 PM
Tạo menu cố định khi scroll chuột
Floating menu thực sự không phải là một thủ thuật gì mới và ghê gớm lắm đâu. Nó có từ rất lâu rồi và cách dùng nó cũng thực sự không quá khó. Trong bài viết này tôi sẽ hướng dẫn các bạn tạo một floating menu cho website và áp dụng nó vào trong WordPress.




Trước hết thì mình cần phải xây dựng trước một cấu trúc menu với HTML
<nav id="fixNav">
  <ul>
    <li><a href="#">Trang chủ</a></li>
    <li><a href="#">iChiaSe.Biz Store</a></li>
    <li><a href="#">Newbie</a></li>
    <li>
      <a href="#">Video</a>
      <ul class="sub-menu">
        <li><a href="#">Html & CSS</a></li>
        <li><a href="#">PHP & MySQL</a></li>
        <li><a href="#">jQuery</a></li>
     </ul>
    </li>
  </ul>
</nav>

Dựa vào cấu trúc trên thì các bạn có thể thấy, menu được xây dựng có 2 cấp. Bây giờ các bạn hãy tiến hành CSS cho menu, tôi xây dựng menu này có style giống như menu đang dùng trên iChiaSe.Biz.

#fixNav{
width: 100%;
height: 35px;
background-color: #0082bb;
display: block;
box-shadow: 0px 2px 2px rgba(0,0,0,0.5); /*Đổ bóng cho menu*/
position: fixed; /*Cho menu cố định 1 vị trí với top và left*/
top: 0; /*Nằm trên cùng*/
left: 0; /*Nằm sát bên trái*/
z-index: 100000; /*Hiển thị lớp trên cùng*/
}
#fixNav ul{
margin: 0;
padding: 0;
}
#fixNav ul li{
list-style:none inside;
width: auto;
float: left;
line-height: 35px; /*Cho text canh giữa menu*/
color: #fff;
padding: 0;
margin-right:10px;
position: relative;
}
#fixNav ul li a{
text-transform: uppercase;
white-space: nowrap; /*Cho chữ trong menu không bị wrap*/
padding: 0 10px;
color: #fff;
display: block;
font-size: 0.8em;
text-decoration: none;
}
/*CSS Style cho Submenu*/
#fixNav ul li ul {
position: absolute;
width: auto;
display: none;
background-color: #252525;
border-bottom: 3px solid #0082bb;
padding-left: 5px;
}
#fixNav ul li ul li{
display: block;
padding:0;
margin: 0;
float: none; /*Bỏ float cho li cấp thứ 2*/
}
/* Hover cho submenu */
#fixNav ul li:hover {
/* Hover thì li sẽ đổi màu*/
background-color: #252525;
}
#fixNav ul li:hover ul{
/*Display ra submenu*/
display: block;
}
/*Không copy cái này, dùng tăng padding top bottom để demo cuộn*/
p{
padding-top: 80px;
padding-bottom: 80px;
}
Giải thích ý nghĩa của css tôi có chú thích comment phía trong code. Các bạn có thể xem và tham khảo. Lưu ý: Các bạn nên tham khảo qua các bài viết hướng dẫn xây dựng menu để có thể hình dung rõ hơn.
#fixNav{
width: 100%;
height: 35px;
background-color: #0082bb;
display: block;
box-shadow: 0px 2px 2px rgba(0,0,0,0.5); /*Đổ bóng cho menu*/
position: fixed; /*Cho menu cố định 1 vị trí với top và left*/
top: 0; /*Nằm trên cùng*/
left: 0; /*Nằm sát bên trái*/
z-index: 100000; /*Hiển thị lớp trên cùng*/
}
Các bạn có thể quan sát thấy css position có giá trị là fixed. Với bất kỳ đối tượng nào được gán css position có giá trị fixed, thì sẽ được cố định tại một vị trí nhất định. Vị trí đó sẽ phụ thuộc vào giá trị top left bottom right. Trong trường hợp này tôi khai báo top và left đều bằng 0, tức nó sẽ nằm trên cùng, bên trái. Do width:100% nên menu sẽ kéo dài toàn màn hình. Các bạn có thể xem demo và code bên dưới này:

#Tích hợp thêm jQuery
Như các bạn thấy, thì trên iChiaSe.Biz. Menu chỉ hiển thị khi bạn cuộn website đến một vị trí nào đó. Bây giờ thì thôi sẽ tiến hành dùng jQuery để thực hiện điều đó. Quy trình hoạt động thì sẽ như vậy: Cuộn chuột đến một móc có giá trị là 150px thì menu sẽ hiển thị ra. Các bạn hãy thêm đoạn code jQuery này vào, ý nghĩa tôi đã có comment phía trong.
jQuery(document).ready(function($) {
//selector đến menu cần làm việc
var TopFixMenu = $("#fixNav");
// dùng sự kiện cuộn chuột để bắt thông tin đã cuộn được chiều dài là bao nhiêu.
$(window).scroll(function(){
// Nếu cuộn được hơn 150px rồi
if($(this).scrollTop()>150){
// Tiến hành show menu ra
TopFixMenu.show();
}else{
// Ngược lại, nhỏ hơn 150px thì hide menu đi.
TopFixMenu.hide();
}}
)
})
Nguồn :iChiaSe.Biz

Mẫu giao diện liên quan

7 Komentar
avatar

Chào bạn Tuấn!
Mình có chút khó khăn này mong được bạn chỉ giúp!
Blog của mình hiện đã có menu, nhưng nó không nằm trên top, nó nằm dưới cái header. Vậy làm thế nào để khi kéo cuộn chuột xuống dưới, qua header đến khi thanh menu lên trên cùng thì nó sẽ đứng cố định tại đó khi mình tiếp tục cuộn chuột xuống dưới!
Thanks bạn!

Balas
avatar

bạn gửi demo mình xem mình mới hướng dẫn đc nhé!

Balas
avatar

giống như ở web: http://cafef.vn bạn xem hộ mình với, blog của mình là http://nhahanoi68.blogspot.com/

Balas
avatar

Bạn phải đặt đoạn code Menu lên đầu trang là thứ nhất
Và thêm 1 đoạn javascrip như sau : jQuery(document).ready(function($) {
//selector đến menu cần làm việc
var TopFixMenu = $("#header-block");
// dùng sự kiện cuộn chuột để bắt thông tin đã cuộn được chiều dài là bao nhiêu.
$(window).scroll(function(){
// Nếu cuộn được hơn 150px rồi
if($(this).scrollTop()>150){
// Tiến hành show menu ra
TopFixMenu.show();
}else{
// Ngược lại, nhỏ hơn 150px thì hide menu đi.
TopFixMenu.hide();
}}
)
})

Balas
avatar

anh ơi cách này không giống như demo http://cafef.vn của bạn ý hỏi rồi, cái này là kéo nó mới hiện. Anh có cách khác không ạ

Balas

Hãy để lại bình luận của bạn
  • Vui lòng để lại ý kiến của bạn về chủ đề. Comments bao gồm liên kết hoạt động, quảng cáo, hoặc tương tự sẽ bị xóa.
  • Để chèm một đoạn code ngắn <i rel="code"> Mã code </i>
  • Để chèn một đoạn code dài <i rel="pre"> mã code </i>
  • Để chèn trích dẫn <i rel="quote"> Nội dung trích dẫn </i>
  • Để chèn hình ảnh <i rel="image"> Link ảnh </i>
  • Để chèn một đoạn video [iframe] URL embed video [/iframe]
  • Sau đó click dán vào ô bên dưới </>
  • © 2015 Khám Phá Blog ✔

Tìm Chúng tôi trên bản đồ
-->