post image

Tabbed Navigation với jQuery & CSS

Tabbed Navigation ngày càng trở nên phổ biến khi mà các designer ngày càng muốn tận dụng từng centimet trên màn hình. Trước đây trang web chỉ đơn giản là banner, nội dung và một ít sidebar. Thì bây giờ trang web phải có đủ thứ phải trình trên trang chủ. Nhưng diện tích chiều ngang thì có hạn do vậy Tabbed Navigation là lựa chọn tốt nhất để tiết kiệm diện tích chiều ngang.

Trong bài này chúng ta sẽ sử dụng kiến thức đã học ở những bài trước như Sprite Image để tạo nút 2 trạng thái. Sau đó dùng CSS để định dạng các thành phần và cuối cùng là sử dụng jQuery để tạo ra hiệu ứng kéo lên, thả xuống.

Thời lượng: 35:05

Download định dạng .avi chất lượng cao: MediaFire, MegaUpload

File size:73.59 MB

Giải thích thêm về jQuery

Bởi vì trên izwebz chưa giới thiệu về jQuery cho nên tôi sẽ có thêm phần giải thích này để các bạn có thể hiểu thêm hơn về jQuery. Với những ai chưa biết về jQuery thì jQuery là một dạng thư viện Javascript giúp bạn tiết kiệm thời gian hơn khi viết code HTML và nó cũng đơn giản hơn Javascript. Để tìm hiểu thêm về jQuery bạn có thể vào trang chủ của jQuery và đọc phần Documentation

Khi viết code jQuery bao giờ cũng bắt đầu với:

$(document).ready(function() {

});

Đoạn code này là phần mở đầu cho jQuery và nó có tác dụng là báo cho trình duyệt biết sẽ chạy những đoạn code ở trong nó một khi đã load xong trang web. Và trong bài này thì nó sẽ chạy đoạn code sau:

$('a.tab').click(function(){
            });

Đây là một trong những event handler của jQuery. Hiểu theo ngôn ngữ nói thì là khi ta click vào một thẻ <a> với class=’tab’ thì sẽ chạy đoạn code nằm trong hai dâu {}

$('.active').removeClass('active');
$(this).addClass('active');
$('.content').slideUp();
var content_show = $(this).attr('title');
$('#'+ content_show).slideDown();

Bạn cũng lưu ý là jQuery Selector làm việc với nguyên lý của CSS Selector. Cho nên khi chúng ta muốn chọn những thành phần có class=’active’ thì mình sẽ gọi là $(‘.active’). Khi gọi ra mình muốn làm gì với nó? chúng ta muốn bỏ cái class=’active’ đi do vậy chúng ta sử dụng function removeClass(). Sau khi đã loại bỏ class=’active’ đi, bây giờ sẽ thêm class=’active’ vào nút mà người dùng đang click. Cho nên function addClass() được sử dụng. Khi đã biết người dùng đang ở nút nào thì chỉ việc kéo nội dung của nó lên trên bằng function slideUp().

Cuối cùng thì ta sẽ tạo một biến trong jQuery để tìm ra phần nội dung nào tương ứng với nút đó dựa vào attribute là title. Lấy title lưu lại vào biến content_show và sử dụng function slideDown() để kết thúc code jQuery

«

»

48 Comments

( Comment bài này )
  1. niemdauchomha_it says:

    Anh ơi em muốn hỏi cái menu của trang http://ngoisaoso.com.vn. Em thấy nó cũng gần giống cái này,nhưng em không biết làm sao :D anh có thể nói sơ qua cách làm cái menu của http://ngoisaoso.com.vn được không ạh?

  2. tidus says:

    Thanks các anh đã có những tut cực kì tuyệt vời cho newbie như em..^^!
    Tuy nhiên tut này có 1 lỗi nhỏ là: khi click vào 1 tab thì nó sẽ load trở về đầu trang.(Nếu cả khối tab này ở phía dưới của 1 trang Web).Vậy có cách nào khắc phục lỗi này =jquery ko?Có thể dùng jquery ui với câu lệnh tabs().Nhưng mà chẳng hiểu sao em dùng ko được.Haizz.Mệt quá.Mai nghiên cứu tiếp vậy…..

  3. kaylaximuoi says:

    Đại ka, muội thấy khi click vào Tab đang active thì mình đừng cho slideUp & slideDown hỉ, vậy nhìn nó tự nhiên hơn.:)

    • NickB says:

      Có vài kiểu fix nhưng sài cách này cho nhanh vậy :D

      $(document).ready(function() {
          $('a.tab').not('.active').click(function(){ //Fixed
              $('.active').removeClass('active');
              $(this).addClass('active');
              $('.content').slideUp();
              var content_show = $(this).attr('title');
              $('#'+ content_show).slideDown();
          });
      });
      
      • kaylaximuoi says:

        Fix kiểu này chỉ hoạt động trên 2 tabs sau thôi, tab đầu tiên mặc định có “active” nên kg đc, thành ra việc chuyển tab lúc này chỉ thực hiện trên 2 tabs sau.

        Ngoài ra vẫn chưa khắc phục được vấn đề khi click active tab.

        Vậy có thể do thuộc tính class, jquery chỉ hiểu trạng thái mặc định ban đầu, khi can thiệp jquery làm thay đổi class thì kg đc hiểu sao???

        • NickB says:

          Sorry Kayla, hôm qua reply mà chưa test (mistake ở chỗ not() return về đối tựong jQuery hơi đặc biệt 1 chút)

          Có thể fix lại bằng cach như sau:

          jQuery('a.tab').click(function(){
              if(!$(this).hasClass('active')){
                  jQuery('.active').removeClass('active');
                  jQuery(this).addClass('active');
                  jQuery('.content').slideUp();
                  var content_show = jQuery(this).attr('title');
                  jQuery('#'+ content_show).slideDown();
              }
          });
          
  4. MagicCmt says:

    Cám ơn các bạn… Chúc trang Izwebz ngày càng phát triển và Demon Warlock dồi dào sức khỏe và đạt nhiều thành công trong công việc…
    Trân thành cảm ơn!!!

  5. tronghoangvimaru says:

    Anh có hướng dẫn là nếu dùng ie hay máy k có java thì tab vẫn có thể hoạt động bình thường ,chỉ không đẹp thôi.Nhưng em thấy anh làm vậy thì cái tab này hoạt động chủ yếu bằng jquery ,nếu mà không có java thì sao mà hoạt động được!!
    Rất mong anh cho ý kiến!!!

    • :-? hic hic! jQuery là thư viện của JavaScript em ạ :D , nói cách khác nó là cách đơn giản hơn để viết mã JavaScript. Chứ nó đâu phải là một ngôn ngữ khác đâu mà em lẫn lộn vậy cà 8-}

  6. thoandien says:

    Chào anh DW
    Anh cho em hỏi là, khi em test nó bằng IE thì nó không hiển thị được đường link khi mình click vào button (không hiển thị được ul#news). Anh giúp em với, thanks

  7. Mr.Dinh says:

    Ý mình ở đây là muốn nói đến cookie, nhưng minh không biết cookie trong jquery nó như thế nào, nếu mình hardcode vào html thì kô ổn, java thông dụng thi có thể set cookie được, mong DW có thể hướng dẫn giúp mọi ngươi.
    Mình muốn dùng cái này để set trạng thái active cho menu navigation của trang, khi đang ở trang nào thì menu của trang đó sẽ được active dù có F5 thì nó vẫn được active.

    Thank DW

  8. honnhienh says:

    nhtera @ mình cũng rất mong ai rành về cookie có một tus về cái này.
    Mr. Dinh@ của bác hình như dùng cookie được đó. lưu lại vào cookie khi mở trang thi lấy cookie ra để xét active (nhưng tui gà cái đó quá không giúp được gì nhiều chỉ gợi ý thôi) :)

  9. nhtera says:

    Nếu muốn lưu trạng thái thì dùng cookie thôi , JQuery có cái plugin cookie đơn giản mà hiệu quả :D . Chưa thấy bài nào anh DW sử dụng đến cookie , hy vọng ngày ko xa sẽ có :D

  10. Chắc cái đó phải hardcode vào html thôi, phần tử nào bạn muốn có class active thì bạn đặt cho nó class là active trong mã HTML luôn. Ko biết còn cách nào hay hơn không nữa?

  11. Mr. Dinh says:

    Anh DW có thể hướng dẫn cách để làm sao để class active được giữ lại khi F5 không? dù có refress nhiều lần vẫn không chạy về tab đầu tiên.

    Thank DW nhiều.
    Mình biết đến izwebz vì một lần tình cờ search được, izwebz có nhiều kiến thức bổ ích cho những ai đam mêm web. Chúc izwebz ngày càng phát triển. Chúc DW nhiều sức khỏe và có nhiều TUT hay hơn nữa

  12. Minh says:

    mình có 2 cái menu jquery, đặt chúng vào cùng 1 file .HTML thì 1 cái chạy 1 cái không chạy, bạn nào có thể giải thích ngắn gọn giúp mình không?

  13. vanmanh says:

    cảm ơn bạn nhiều lắm về cái video này. học được rất nhiều thứ hay.

    • vanmanh says:

      @Mình nghĩ bạn lên đê cái link download khi click vô nó mở trang mới cho tiện. mỗi lần muốn load về nó toàn chạy vô mediafile. down song quay lại cực quá.

      • @vanmanh : những người chỉ download đã thấy cực như bạn, thì người làm nó như chúng tôi không cực chăng ?. Được voi đòi hai bà trưng. ^^

  14. dinhduy says:

    Phải nói là anh rất tuyệt..em thần tượng anh mất rồi .. ước gì được thấy anh ..
    Anh có thể quay 1 video về cuộc sống của anh bên đó không..

  15. em bổ sung thêm, khi hover tabs chứ không phải hover links

  16. sao IE 6 nó không có tác dụng khi hover nhỉ:( có cách nào khắc phục được không vậy anh DW?

  17. Hữu Thỏa says:

    Nếu mình muốn độ cao của nó cố định, không thụt lên thụt xuống thì làm sao anh?

  18. nhtera says:

    Nhúng flash vào banner thì có gì đâu bác . Code embed trên mạng cũng nhiều lắm mà. Thử vài cái chả lẽ không cái nào work :D .

    p/s: Hehe, izwebz tiếp cận theo hướng làm các tut bằng video là chủ yếu nên tạo cảm giác mới mẻ và hấp dẫn là đúng thôi. Mong rằng sẽ có nhiều bác có khả năng như dw và cs chia sẻ những bài học thú vị như vậy hơn nữa . Hehe cao thủ việt nam chắc không thiếu mà các bác ấy toàn ở ẩn thôi . Hi vọng bên lập trình ứng dụng có 1 trang tương tự như thế này thì tốt quá . thank to all !

  19. huynk says:

    có 1 người bạn đã giới thiệu cho tôi về website này. sau 1 tuần tiếp xúc đọc, học hôm rồi bạn tôi có hỏi sao thấy izwebz thế nào? tôi ko ngần ngại nói 10 điểm hì tôi là 1 newbi sau khi xem izwebz tôi cảm thấy có 1 cái gì đó khơi dậy đam mê của mình đến với môn này. Chúc Izwebz ngày càng phát triển và có nhiều tút hay như thế để những ai yêu thích môn này khi đến với izwebz đều có thể tự tay mình làm 1 trang web. Chúc DM và CS sức khỏe và hạnh phúc ngày càng thành công trong sự nghiệp của bạn.

    P/S mình đã xem khá nhiều ở trang izwebz, và có dùng tool seach mà ko tìm thấy bài nào hướng dẫn về nhúng flash vào banner, mình tự làm thì làm hoài ko được nó tùm lum ra hoặc ko vào 1 chuẩn nào hết hì newbi mà. rất mong có 1 tút hướng dẫn theo chuẩn. cảm ơn các bạn rất nhiều.

  20. hoainam says:

    Anh ơi.Em xem có rất nhiều bài anh dùng JQuery hay CSS và có nói qua về chúng nhưng thực sự là không cụ thể về chúng. Em thấy cách anh giải thích và hướng dẫn rất hay nên tiện thể anh có thể làm những tut hướng dẫn cụ thể về chúng không ạ.Chứ em tìm trên mạng khó có trang web nào làm tut video mà những tut nước ngoài thì em không hiểu lắm. thanks anh trước

  21. layla says:

    anh ơi cho em hỏi
    vì sao khi ta chuyển click thành hover va hover chuột hơi nhanh trên các menu để load nội dung thì có hiện tượng nội dung tab này đè lên tab kia.
    (cac chu chồng lên nhau khó nhìn quá).
    em chẳng biết làm sao cả. anh giúp với.

  22. Đâu có random? videos thì nằm trong mục Videos mà.

    Anh không chia nhỏ ra nhiều Cagegories như những trang web khác bởi vì không muốn có cả chục Categories mà mỗi category chỉ có mấy bài viết.

  23. E thấy nên để những videos đã up lên thành từng mục thì sẽ dễ tìm kiếm hơn, chứ để random đôi khi khó tìm quá :D .

  24. xuka says:

    Anh DW ơi,em không biết anh viết code trên dreamweaver hay trên ASP.net vậy.Vì khi em viết JQuery,nó ko có hỗ trợ các chức năng có sẵn như:addClass,removeClass,nhiều lúc gõ sai từ chữ Hoa sang chữ thường làm cho trình duyệt ko chạy đúng.Em xem các video của anh,thấy nó tự động show xuống,thật tiện lợi khi viết.
    Em viết trên dreamweaver

  25. lee teenet says:

    bạn ơi , mình nghe bạn teach quen rùi. tớ thấy bạn làm tutor tuyệt vời làm sao

  26. Cái đó anh cũng nghe nói qua nhưng không được sử dụng rộng rãi và cũng không được hỗ trợ bởi các trình duyệt nên anh cũng không muốn phung phí thời gian vào nó. Anh nghĩ thời gian em rảnh thì nên tập trung vào những gì phổ biến như PHP, jQuery, CSS còn hơn là phung phí thời gian vào những Project chỉ ít người biết đến.

    Nhưng CSS3 thì đúng là sắp ra đời rồi! sẽ có tut về CSS3.

  27. Thinh says:

    Anh ơi bài viết của anh hay lắm.
    Em được biết có New Mechanisms of Stylesheet (cơ chế mới của CSS) nhằm trừu tượng hóa CSS dạng style.sass đó anh. Em xem các tut hướng dẫn sass rất dễ hiễu và rất hay, nhưng em bị rắc rối ở khâu setup. Anh là người có kinh nghiệm, em mong anh có 1 tut hướng dẫn về sass đó để em được học hỏi thêm. Thân

  28. tuanit85 says:

    Phải nói là toàn những tutorial rất rất hay và bổ ích
    Ps: Còn một số tutorial chưa có link download video mong demon sớm cập nhật link cho anh em học tập, điển hình như tutorial này :D

  29. luckyluu says:

    Thanks anh rất nhiều, học được rất nhiều thứ từ website của anh

1 2
  1. BB
  2. BB
  3. BB

arrow

Lưu ý khi post comment:

  • Không "bóc tem" topic
  • Dùng lời lẽ có văn hoá và lịch sự
  • Xem trang FAQs trước khi hỏi
  • Bạn có thể dùng thẻ HTML như:<strong>, <em>, <a>
  • Đặt code trong thẻ [php],[html],[javascript],[css]

Chọn kiểu gõ: Tự động TELEX VNI Tắt