Hướng dẫn code menu cố định chạy theo web khi scroll chuột

Hello các anh em, dạo gần đấy mình thấy một số anh em tìm kiếm keyword này rất nhiều. Do đó, trong bài viết này mình xin hướng dẫn các bạn cách code menu cố định chạy theo web khi scroll chuột. Nào hãy cùng Greenweb xem ngay bên dưới nhé!

Dựa theo các bước làm này bạn có thể theo đó mà tùy chỉnh vào trang web của bạn nhé

Bước 1 : Tạo hình với HTML & CSS

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="#">Izwebz 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 hotdeal

#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. Sau khi làm xong menu như trên thì các bạn đã có cho mình một cái floating menu rồi đó. Bây giờ tôi sẽ giải thích rõ hơn. Các bạn hãy quan sát trong css chổ đầu tiên, khai báo cho #fixNav.

#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.

Bước 2 : Tích hợp thêm jQuery

Như các bạn thấy, thì trên 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();
        }}
    )
})

Lưu ý: các bạn cần phải chèn thư viện jquery vào trước khi dùng. Tuy nhiên, bây giờ menu vẫn chưa hoạt động. Bạn hãy quay lại css và chỉnh sửa khai báo ở đoạn #fixNav với giá trị display:block thành display:none. Nguyên nhân là chúng ta muốn menu nó ẩn từ đầu, chỉ khi cuộn chuột vượt móc giá trị nào đó nó mới hiện ra thôi.

Lời kết

Hy vọng, bài viết này sẽ giúp ích nhiều cho các bạn. Nếu trong quá trình làm gặp khó khăn gì thì liên hệ Greenweb ngay nhé.

Đánh giá post