Advertisement
  1. Web Design
  2. Bootstrap 4

Cara Menambahkan Deep Linking ke Komponen Tab Bootstrap 4

Scroll to top
Read Time: 4 min

() translation by (you can also view the original English article)

Hari ini kita akan belajar cara menambahkan "deep linking" ke tab Bootstrap 4. Untuk lebih memahami apa yang sedang kita kerjakan, lihat halaman demo dan perhatikan dua hal:

  1. Bagaimana perubahan URL saat Anda mengklik tab.
  2. Dengan memberikan masing-masing tab URL-nya sendiri, konten menjadi dapat dibagikan. Jika Anda mengambil URL tab dan membukanya di browser/jendela lain, tab yang sesuai akan terlihat.


Perhatikan bahwa URL mencerminkan tab yang dipilih

Kami akan menguraikan tiga langkah utama; HTML, CSS, dan JavaScript. Tingkat kompetensi tertentu untuk ketiga hal ini diasumsikan. Gembira untuk melihat bagaimana kita akan membangun ini? Jika jawabannya ya, mari kita mulai!

1. Membangun Tab

Kita akan memulai dengan template awal yang diambil dari dokumentasi Bootstrap.

1
<!doctype html>
2
<html lang="en">
3
  <head>
4
    <meta charset="utf-8">
5
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
7
    <!-- custom CSS -->
8
    <link rel="stylesheet" href="css/main.css">
9
    <title>How to Add Deep Linking to the Bootstrap 4 Tabs Component</title>
10
  </head>
11
  <body>
12
    <!-- content here -->
13
    
14
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
15
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
16
    <!-- custom JS -->
17
    <script src="js/main.js"></script>
18
  </body>
19
</html>

Untuk membuat tab, kita akan memanfaatkan kode contoh untuk komponen tab yang disediakan Bootstrap:

1
<ul class="nav nav-mytabs" id="myTab" role="tablist">
2
  <li class="nav-item">
3
    <a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
4
  </li>
5
  <li class="nav-item">
6
    <a class="nav-link" id="history-tab" data-toggle="tab" href="#history" role="tab" aria-controls="history" aria-selected="false">History</a>
7
  </li>
8
  <li class="nav-item">
9
    <a class="nav-link" id="city-attractions-tab" data-toggle="tab" href="#city-attractions" role="tab" aria-controls="city-attractions" aria-selected="false">City Attractions</a>
10
  </li>
11
</ul>
12
<div class="tab-content mytab-content" id="myTabContent">
13
  <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
14
    <!-- content here -->
15
  </div>
16
  <div class="tab-pane fade" id="history" role="tabpanel" aria-labelledby="history-tab">
17
    <!-- content here -->
18
  </div>
19
  <div class="tab-pane fade" id="city-attractions" role="tabpanel" aria-labelledby="city-attractions-tab">
20
    <!-- content here -->
21
  </div>
22
</div>

2. CSS

Selanjutnya kita menetapkan beberapa aturan CSS untuk komponen kita. Tidak ada yang terlalu mewah, hanya beberapa gaya dasar. Perlu disebutkan bahwa dalam tutorial sebelumnya, kita menggunakan gaya serupa untuk membuat komponen tab khusus.

Berikut ini style awalnya:

1
.nav-mytabs {
2
  margin-top: 2rem;
3
}
4
5
.nav-mytabs li:not(:last-child) {
6
  margin-right: 7px;
7
}
8
9
.nav-mytabs a {
10
  position: relative;
11
  top: 4px;
12
  padding: 10px 25px;
13
  border-radius: 2px 2px 0 0;
14
  background: white;
15
  color: black;
16
  opacity: 0.7;
17
  transition: all 0.1s ease-in-out;
18
}
19
20
.nav-mytabs a.active, 
21
.nav-mytabs a:hover {
22
  opacity: 1;
23
  top: 0;
24
}
25
26
.mytab-content {
27
  position: relative;
28
  z-index: 2;
29
  padding: 25px;
30
  border-radius: 0 4px 4px 4px;
31
  background: white;
32
}

3. JavaScript

Dengan HTML dan CSS di tempatnya, sekarang saatnya untuk melihat kode JavaScript yang diperlukan (ini adalah bagian penting).

Pertama, ketika DOM sudah siap, kita mengambil URL halaman dan menggunakan regular expression untuk menghapus garis miringnya. Misalnya, jika URL asli adalah something/, URL yang dimodifikasi akan menjadi something.

Selanjutnya, kita periksa untuk melihat apakah URL mengandung hash. Jika itu kasusnya, itu berarti kita ingin menampilkan isi dari tab kedua atau ketiga (dalam contoh kita). Untuk melakukannya, kita melakukan hal berikut:

  1. Ambil nama tab target dan aktifkan dengan menggunakan metode tab Bootstrap.
  2. Gunakan reguler expression untuk menghasilkan format URL yang diinginkan.
  3. Update URL halaman tanpa memaksa pemuatan ulang halaman dengan memanfaatkan metode replaceState.
  4. Secara opsional, memaksa halaman scroll untuk memulai dari bagian atas halaman.

Setiap kali kita mengeklik tab, kita melakukan hal berikut:

  1. Ambil nilai atribut href dari tab ini. Dalam kasus kita, nilai yang mungkin adalah #home, #history, #city-attractions.
  2. Periksa nilai atribut dan, bergantung pada itu, buat format URL yang diinginkan.
  3. Perbarui URL halaman tanpa memaksa pemuatan ulang halaman dengan memanfaatkan metode replaceState.

Inilah JavaScript yang menangani semua itu:

1
$(document).ready(() => {
2
  let url = location.href.replace(/\/$/, "");
3
4
  if (location.hash) {
5
    const hash = url.split("#");
6
    $('#myTab a[href="#'+hash[1]+'"]').tab("show");
7
    url = location.href.replace(/\/#/, "#");
8
    history.replaceState(null, null, url);
9
    setTimeout(() => {
10
      $(window).scrollTop(0);
11
    }, 400);
12
  } 
13
  
14
  $('a[data-toggle="tab"]').on("click", function() {
15
    let newUrl;
16
    const hash = $(this).attr("href");
17
    if(hash == "#home") {
18
      newUrl = url.split("#")[0];
19
    } else {
20
      newUrl = url.split("#")[0] + hash;
21
    }
22
    newUrl += "/";
23
    history.replaceState(null, null, newUrl);
24
  });
25
});

4. Dukungan Browser

Demo harus berfungsi dengan baik di semua browser terbaru. Untuk mempermudah, saya belum menggunakan kompiler JavaScript (misalnya Babel), tetapi dalam kode Anda sendiri, Anda mungkin harus melakukannya.

Kesimpulan

Dalam tutorial ini, kami berhasil menyesuaikan perilaku tab Bootstrap 4, dengan memberi setiap tab URL yang dapat diidentifikasi, membuat konten mereka lebih dapat dinavigasi dan dibagikan. Perlu diingat bahwa proses yang diterapkan di sini juga dapat diterapkan ke kerangka kerja lainnya atau bahkan komponen tab khusus.

Jika ada hal-hal yang tidak Anda pahami, atau apa pun yang tampaknya tidak jelas bagi Anda, beri tahu saya di komentar di bawah ini!

Bacaan lebih lanjut


Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.