Hỗ trợ trực tuyến

  • (Bùi Trọng Bằng)

Thống kê

  • truy cập   (chi tiết)
    trong hôm nay
  • lượt xem
    trong hôm nay
  • thành viên
  • Thành viên trực tuyến

    0 khách và 0 thành viên

    DANH NGÔN MỖI NGÀY

    Gốc > Code cho Blog và Web >

    Pro Menu

    Lấy ý tưởng từ việc thực hiện demo cho bài viết Tạo Menu Thanh menu ngang có sổ dọc xuống mình dự định sẽ updated thủ thuật lên bằng việc tạo các giao diện khác nhau cho menu khi xem ở các trang khác nhau, ví dụ như các trang label. Nhưng sau đó mình nhớ đến kênh14 cũng có menu như vậy (chỉ khác là không có dropdown) mà giao diện lại đẹp nữa, nên mình quyết định Rip menu này. Và ở bài này menu sẽ không có hiệu ứng dropdown, mình dự định sẽ thêm hiệu ứng dropdown trong thời gian tới.

    Hình ảnh minh họa :
    Do làm biếng design giao diện cho nó, nên mình lấy hình nên bên kênh 14 về rồi fix lại để giới thiệu cho mọi người. Và sau đây là 1 số tính năng của nó :
    - Tự động thay đổi giao diện của menu cho các trang định sẵn.
    - có hiệu ứng trang hiện hành (current) trên menu.
    - có 6 kiểu giao diện cho các lựa chọn để thay đổi.

    Sau đây là các bước thực hiện :
    - Code CSS
    sau đó dán đoạn code bên dưới vào :
     
     
    <style type="text/css">
    #promenu ul li a:hover {text-decoration:none;}
    #promenu {
    background-repeat: repeat-x;
    background-image: url(http://2.bp.blogspot.com/-CAiNwOD8ZxA/Tv31TJIe4kI/AAAAAAAACN0/7cd5Z_NcdV4/s400/1-6-bg.png);
    width: 100%;
    height: 32px;
    }
    .menu {
    list-style: none;
    width: 100%;
    margin: auto!important;
    }
    .menu li {
    float: left;
    text-align: center;
    padding:0!important;
    }
    .menu li a {
    color: white;
    }
    .menu .active, .menu li:hover {
    background-position: 0 -34px;
    float: left;
    }
    .menu .active span, .menu span:hover {
    background-position: 100% -34px;
    float: left;
    line-height: 30px;
    height: 30px;
    }
    .menu li a span {
    font: 12px/31px Tahoma;
    font-weight: 700;
    display: block;
    text-align: center;
    padding: 0 8px 0 9px;
    }
    .menusep {
    background-position: 0 0;
    height: 32px;
    line-height: 32px;
    width: 2px;
    }
    </style>

    <script type="text/javascript">
    //<![CDATA[
    var style1=["0px","http://2.bp.blogspot.com/-jD-t7t4sj2o/Tvqdg0eQkKI/AAAAAAAACME/tLwUVbK60qM/s318/style1-sp.png"];
    var style2=["-40px","http://2.bp.blogspot.com/-f16OTLOYr8E/TvqdhFEeJlI/AAAAAAAACMA/Yu09XevCqHs/s318/style2-sp.png"];
    var style3=["-80px","http://2.bp.blogspot.com/-dEyh5KIz8fw/TvqdmGUVEeI/AAAAAAAACNE/e6kcm5Yp0dM/s318/style3-sp.png"];
    var style4=["-120px","http://2.bp.blogspot.com/-2xZHcRiVK7s/TvqdiExbcqI/AAAAAAAACMg/iOGIMpuWO4c/s318/style4-sp.png"];
    var style5=["-160px","http://2.bp.blogspot.com/-GGrN1FfltwU/Tvqdje5FCfI/AAAAAAAACMs/fRlPK4rFUns/s318/style5-sp.png"];
    var style6=["-200px","http://2.bp.blogspot.com/-OrAhQGI__is/TvqdkKrM4kI/AAAAAAAACM8/dFaWRKt9Kns/s318/style6-sp.png"];

    var m0=["http://thietkewebdepbba.com","Home","home_id"];
    var m1=["link_menu1","Menu1","m_id1"];
    var m2=["link_menu2","Menu2","m_id2"];
    var m3=["link_menu3","Menu3","m_id3"];
    var m4=["link_menu4","Menu4","m_id4"];
    var m5=["link_menu5","Menu5","m_id5"];
    var m6=["link_menu6","Menu6","m_id6"];

    var ttmenu = [m0,m1,m2,m3,m4,m5,m6];

    var n=ttmenu.length;
    var list_menu=[];
    var list_active=[];
    var c_menu='';
    var m_homepage='http://thietkewebdepbba.com';
    var h_cond=m_homepage+'/search';

    var active_cond = location.href;
    var home_cond=active_cond.split("?")[0];

    var bg_pos='';
    var sp_img='';

    if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
    else if (active_cond.indexOf(ttmenu[2][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
    else if (active_cond.indexOf(ttmenu[3][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}
    else if (active_cond.indexOf(ttmenu[4][0])!=-1) {bg_pos=style5[0];sp_img=style5[1];}
    else if (active_cond.indexOf(ttmenu[5][0])!=-1) {bg_pos=style6[0];sp_img=style6[1];}
    else if (active_cond.indexOf(ttmenu[6][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
    else {bg_pos=style1[0];sp_img=style1[1];}

    var mcss = document.createElement('style');
    mcss.type = 'text/css';
    mcss.innerHTML = '#promenu {background-position: 0 '+bg_pos+'} .menu li:hover, .menu .active, .menu .active span, .menusep, .menu span:hover {background-image: url('+sp_img+')}';
    document.body.appendChild(mcss);

    c_menu +='<div id="promenu"><ul class="menu">';

    for (var i=0;i<n;i++) {

    if ((home_cond==m_homepage)||(home_cond==h_cond)) {list_active[0]='class="active"';}
    else if (active_cond.indexOf(ttmenu[i][0])!=-1) {list_active[i]='class="active"';} else {list_active[i]='';}

    list_menu[i]='<li><a href="'+ttmenu[i][0]+'" '+list_active[i]+' id="'+ttmenu[i][2]+'"><span>'+ttmenu[i][1]+'</span></a></li>';
    c_menu +=list_menu[i];
    if (i<n-1) {c_menu +='<li class="menusep"> </li>';}
    }
    c_menu +='</ul></div>';
    document.write(c_menu);

    //]]>
    </script>
     

    Một vài hướng dẫn :
    - Việc đầu tiên là thay
    http://thietkewebdepbba.com thành tên miền của blog bạn, nhớ là không có dấu (/) theo sau tên miền.
    - Để thêm menu, bớt menu, thay đổi tên hiển thị của menu, thay đổi link liên kết của menu,... các bạn chỉnh sửa ở đoạn code như bên dưới :
     
     
    ...
    ...
    var m0=["http://thietkewebdepbba.com","Home","home_id"];
    var m1=["link_menu1","Menu1","m_id1"];
    var m2=["link_menu2","Menu2","m_id2"];
    var m3=["link_menu3","Menu3","m_id3"];
    var m4=["link_menu4","Menu4","m_id4"];
    var m5=["link_menu5","Menu5","m_id5"];
    var m6=["link_menu6","Menu6","m_id6"];

    var ttmenu = [m0,m1,m2,m3,m4,m5,m6];
    ...
    ...
    - http://thietkewebdepbba.com thay bằng địa chỉ trang chủ của blog bạn
    -
    link_menu1, link_menu2, ... là đia chỉ liên kết của các menu.
    -
    Menu1, Menu2, ... là tên hiển thị của các menu.
    - nếu muốn thêm nhiều menu nữa thì các bạn thêm code tương tự như bên dưới :

    ...
    ...
    var m0=["http://thietkewebdepbba.com","Home","home_id"];
    var m1=["link_menu1","Menu1","m_id1"];
    var m2=["link_menu2","Menu2","m_id2"];
    var m3=["link_menu3","Menu3","m_id3"];
    var m4=["link_menu4","Menu4","m_id4"];
    var m5=["link_menu5","Menu5","m_id5"];
    var m6=["link_menu6","Menu6","m_id6"];
    var m7=["link_menu7","Menu7","m_id7"];
    var m8=["link_menu8","Menu8","m_id8"];


    var ttmenu = [m0,m1,m2,m3,m4,m5,m6,m7,m8];
    ...
    ...
     
     
     
    - để tùy chọn style cho menu ở mỗi trang, các bạn chỉnh sửa ở đoạn code bên dưới :
     
     
     
     
    ...
    ...
    if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
    else if (active_cond.indexOf(ttmenu[2][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
    else if (active_cond.indexOf(ttmenu[3][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}
    else if (active_cond.indexOf(ttmenu[4][0])!=-1) {bg_pos=style5[0];sp_img=style5[1];}
    else if (active_cond.indexOf(ttmenu[5][0])!=-1) {bg_pos=style6[0];sp_img=style6[1];}
    else if (active_cond.indexOf(ttmenu[6][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
    else {bg_pos=style1[0];sp_img=style1[1];}
    ...
    ...
     
     
     
    - ttmenu[1][0], ttmenu[2][0], ..., ttmenu[6][0] ; đây là các phần tử trong mảng 2 chiều ttmenu, tương ứng với địa chỉ liên kết của các menu : Menu1, Menu2, ..., Menu6
    - ở trên
    menu0, tức là menu HOME mình cho style mặc định là style1. cùng style với các trang liên kết không có trong menu (ví dụ các trang archive hoặc trang bài viết, ...) , hoặc các liên kết không được chọn style để hiển thị.
    - code trên sẽ được hình dung như bên dưới :
     
     
    Menu0 ------ style1
    Menu1 ------ style2
    Menu2 ------ style3
    Menu3 ------ style4
    Menu4 ------ style5
    Menu5 ------ style6
    Menu6 ------ style2
    Trang khác ------ style1
     
     
     
    - Nếu muốn thay đổi style cho các trang, các bạn chỉ cần đổi tên style1, style2,... thành các style khác là được. tức là các vị trí trong code bên dưới :
     
     
     
    ...
    ...
    if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
    else if (active_cond.indexOf(ttmenu[2][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
    else if (active_cond.indexOf(ttmenu[3][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}
    else if (active_cond.indexOf(ttmenu[4][0])!=-1) {bg_pos=style5[0];sp_img=style5[1];}
    else if (active_cond.indexOf(ttmenu[5][0])!=-1) {bg_pos=style6[0];sp_img=style6[1];}
    else if (active_cond.indexOf(ttmenu[6][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
    else {bg_pos=style1[0];sp_img=style1[1];}
    ...
    ...
     
     

    - Nếu như có nhiều menu thì các bạn cứ thêm code như bên dưới để chọn style cho nó :
     
     
    ...
    ...
    if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
    else if (active_cond.indexOf(ttmenu[2][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
    else if (active_cond.indexOf(ttmenu[3][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}
    else if (active_cond.indexOf(ttmenu[4][0])!=-1) {bg_pos=style5[0];sp_img=style5[1];}
    else if (active_cond.indexOf(ttmenu[5][0])!=-1) {bg_pos=style6[0];sp_img=style6[1];}
    else if (active_cond.indexOf(ttmenu[6][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
    else if (active_cond.indexOf(ttmenu[7][0])!=-1) {bg_pos=style3[0];sp_img=style3[1];}
    else if (active_cond.indexOf(ttmenu[8][0])!=-1) {bg_pos=style4[0];sp_img=style4[1];}

    else {bg_pos=style1[0];sp_img=style1[1];}
    ...
    ...
     
     
    - lưu ý : ttmenu[7][0], và ttmenu[8][0] là liên kết của các Menu7, và Menu8.
    - nếu muốn chỉ 1 trang nào đó có giao diện đặc biệt khác với các trang còn lại (ở đây mình ví dụ là trang Menu1) thì đoạn code ở trên sẽ chỉ còn như bên dưới :
     
     
    ...
    ...
    if (active_cond.indexOf(ttmenu[1][0])!=-1) {bg_pos=style2[0];sp_img=style2[1];}
    else {bg_pos=style1[0];sp_img=style1[1];}
    ...
    ...
     
    - Đoạn code trên có nghĩa là chỉ có trang Menu1 là có giao diện riêng biệt là Style2, còn các trang khác sẽ có giao diện Style1.

    Như vậy mình hướng dẫn đã xong. các bạn cứ test thử, nếu có trục trặc gì mình sẽ fix lại bài viết và cập nhật thêm hướng dẫn.
     

    Nhắn tin cho tác giả
    Cao Bằng @ 08:09 12/03/2012
    Số lượt xem: 2435
    Số lượt thích: 0 người
    Avatar

    Pro Menu

     
    Gửi ý kiến