Membuat Menu Navigasi Responsive dengan jQuery

Diposting oleh Label: di
Menu merupakan hal yang wajib ada pada website/blog untuk dapat mempermudah pembaca dalam mendapatkan artikel mereka inginkan. Baik itu diisikan dengan sebuah link yang hanya menuju ke satu artikel ataupun menuju kategori tertentu. Menu ada yang diletakkan dibagian atas atau bawah artikel serta ada juga di sidebar.

Seiring dengan perkembangan teknologi dan dengan bermunculannya smartphone/tablet dengan ukuran layar yang berbeda-beda. Mau tidak mau banyak dari blogger mulai memikirkan untuk membuat blognya menjadi responsive (dapat menyesuaikan dengan layar). Salah satu bagian yang perlu dibuat responsive tidak lain yaitu pada menu.

Sebenarnya diluar sana banyak script untuk mempermudah dalam pembuatan menu yang responsive. Ada dengan metode merubahnya menjadi tag select, merubah menu menjadi tulisan more dan masih banyak lagi. Sedangkan menu yang saya buat ini menggunakan jQuery sehingga setidaknya jQuery library harus sudah ada terpasang agar dapat berfungsi.

Pada template yang saya buat sebelumnya saya sering menggunakan jQuery clone() ataupun script dari SelectNav untuk membuat menu responsivenya. Hal itu karena saya masih kurang mengerti tetang jQuery. Berbeda pada template, saya membuatnya dengan memanfaatkan jQuery resize() yang digabungkan dengan fungsi if untuk mengetahui ukuran layar. Sehingga efeknya slidenya juga masih berfungsi serta tidak membuat dua struktur html seperti ketika menggunakan jQuery clone()

Nah kali ini saya akan menjelaskan bagaimana membuat menu navigasi dengan jguery dengan efek slidedown.

Struktur HTML

<nav>
<a id="tombolmenu" href="#">Menu</a>
  <ul class="menu">
    <li><a href="#">Menu 1</a></li>
    <li><a href="#">Menu 2</a></li>
    <li><a href="#">Menu 3</a></li>
    <li><a href="#">Menu 4</a></li>
    <li><a href="#">Menu 5</a></li>
    <li><a href="#">Menu Dgn DropDown</a>
      <ul class="hidden">
        <li><a href="#">Menu Dropdown 1</a></li>
        <li><a href="#">Menu Dropdown 1</a></li>
        <li><a href="#">Menu Dropdown 1</a></li>
        <li><a href="#">Menu Dropdown 1</a></li>  
      </ul>
    </li> 
  </ul>
</nav>
Struktur html diatas merupakan struktur dasar dalam membuat menu navigasi dengan efek slideshow.
Tag a (baris 2) dengan id tombolmenu nantinya akan berfungsi sebagai tombol yang akan menampilkan menu pada saat layar lebih kecil.
Setiap tag ul diberikan class yang berbeda, pada tag ul yang pertama saya beri class menu (baris 3) sebagai penanda itu merupakan class untuk tag ul utama.
Sedangkan pada tag ul dengan class hidden (baris 10) sebagai backup jika JS tidak berungsi.

Style (CSS)

nav {
  font:normal normal 11px/30px Verdana,Geneva,sans-serif;
  background-color:#313131;
}

nav,
nav * {
  display:block;
}

nav #tombolmenu {
  display:none;
}

nav ul,
nav li {
  padding:0;
  margin:0;
  list-style:none;
}

nav ul {
  height:30px;
}

nav li {
  float:left;
  position:relative;
}

nav li a {
  display:block;
  padding:0 10px;
  color:white;
  text-decoration:none;
}

nav li:hover > a {
  background-color:#1D8FC5;
}

nav li ul {
  position:absolute;
  background-color:black;
  height:auto;
  width:160px;
  display:none;
}

nav li:hover ul.hidden {
  display:block;
}

nav li li {
  float:none;
}

@media only screen and (max-width:600px) {
  nav #tombolmenu {
    display:block;
    padding:0 15px;
    background-color:black;
    text-decoration:none;
  }
  nav #tombolmenu.active {
    background-color:#1D8FC5;
    color:white;
  }
  nav ul {
    height:auto;
    display:none;
  }
  nav li {
    float:none;
  }
  nav li ul {
    width:100%;
  }
}
Dari kode CSS ini, pada kondisi normal, tag a dengan class tombolmenu tidak ditampilkan, serta tag ul class menu tingginya diatur hanya 30px sedangkan dengan class hidden dibuat auto. Dan tag li dibuat float kekiri
Pada saat layar kurang dari 600px maka tag a dengan class tombolmenu ditampilkan. Dan juga tag ul class menu tingginya dibuat auto, serta tag li di hilangkan floatnya.

Javascript/jQuery

(function () {
    $('nav ul').removeClass('hidden');
    $('nav li').hover(function () {
        $(this).parent('ul.menu').css('overflow', 'visible');
        $(this).children('ul').filter(':not(:animated)').slideDown();
    }, function () {       
        $(this).children('ul').slideUp();
    });

    $('#tombolmenu').toggle(function () {
        $(this).addClass('active');
        $('nav > ul').slideDown();
        return false;
    }, function () {
        $(this).removeClass('active');
        $('nav > ul').slideUp();
        return false;
    });
    function checkWidth() {
        if ($(window).width() > 600) {
            $('nav > ul').css('display', 'block');
        } else if ($(window).width() <= 600 && $('#tombolmenu').attr('class') === 'active') {
            $('nav > ul').css('display', 'block');
        } else if ($(window).width() <= 600 && $('#tombolmenu').attr('class') !== 'active') {
            $('nav > ul').css('display', 'none');
        }
    }
    $(window).resize(checkWidth);
})();
 
 
 
Pada baris kedua akan mencari tag ul dan menghapus class hidden agar slidedownnya dapat berfungsi.
Pada baris keempat ketika tag li disorot maka menu ul dengan class menu overflow cssnya dibuat visible, hal ini karena jika pada tombol menu dengan layar lebih kecil (600px) ditekan maka overflownya akan menjadi hidden sehingga jika tidak diberikan fungsi seperti itu maka ketika tag li dengan sub menu disorot menu yang ada dibawahnya tidak terlihat.
Pada baris ke-10 - 18 merupakan fungsi toggle untuk tombol menu.
Pada baris ke-19 - 27 fungsi untuk melihat ukuran mengetahui ukuran layar beserta perbandingan untuk membuat tag dengan class menu muncul atau tidak.
Pada baris 28 fungsi jQuery resize() yang akan menjalankan fungsi checkWidth pada baris 19 - 27 jika ukuran layar dirubah. (jQuery resize() ini akan berjalan jika terjadi perubahan ukuran layar).

Nah begitulah sedikit penjelasan bagaimana membuat menu responsive yang saya ketahui.
Semoga dapat berguna bagi anda yang membaca.
Sukses Selalu bagi Anda
Satank Mkr
Posting Komentar

Back to Top