Home > JavaScript, PrototypeJs, Snippets, Tips & Trick > T-10 Tabs: Membuat Tab Pada Halaman Web Dengan Lebih Mudah

T-10 Tabs: Membuat Tab Pada Halaman Web Dengan Lebih Mudah

January 2nd, 2009 2,209 views Leave a comment Go to comments

Sebelumnya saya ucapkan, Selamat tahun baru 2009, semoga segala cita-cita anda tercapai pada tahun ini… Amien. Berarti ini adalah posting pertama saya di tahun 2009… ^_^

Pada saat ini teknologi web semakin gencar dikembangkan oleh developer agar dapat menyaingi keunggulan pemrograman desktop, hal yang nyata terjadi adalah semakin banyak interface form desktop yang bisa diimplementasikan di halaman web. Contohnya seperti DateTimePicker, ColorPicker, DynamicGrid, Slider dan PageTab. Khusus untuk PageTab atau Tab saya akan memberikan kemudahan dalam mengimplementasikannya ke aplikasi anda.

Interface Tab sangat berguna untuk memilah-milah halaman atau form, contohnya anda bisa lihat di gambarnya di bawah ini.

Dengan adanya tab, kita bisa memasukan banyak content pada 1 halaman dan merapihkannya dengan metode page tab.

Biasanya untuk membuat tab kita butuh banyak setup seperti CSS, javascript, pengaturan HTML dll. Namun saya akan memberikan kemudahan pada class yang saya buat di bawah ini, berikut adalah script dari class “tabs.class.js”. Script ini hanya membutuhkan framework prototype.js.

var T10Tabs = Class.create(
  { 
    // method initialize adalah konstruktor dari class T10Tabs
	initialize: function(tabprefix,contentprefix){ 
		/* tidak melakukan apa-apa, anda bisa menambahkan beberapa 
		   perintah disini apabila ingin mengembangkan */
	},
	addTab: function(tabID,tabContentID){
		this.setNormalStyle(tabID); // Membuat element tabID menjadi style normal (belum diseleksi)
		$(tabContentID).setStyle({
				padding: '4px',
				border: '1px solid #000',
				backgroundColor: '#B4D4F1',
				clear: 'left', // untuk menghilangkan efek 'float' dari style tab
				display: 'none', // secara default tab content tidak ditampilkan terlebih dahulu
				height: '200px'			
			});
		T10Tabs.tab_id.push(tabID); // simpan element tab ke dalam array tab_id
		T10Tabs.tab_content.push(tabContentID); // simpan element content tab ke dalam array tab_content
 
		var index = T10Tabs.tab_id.length - 1; // ambil index terakhir dengan cara = panjang array tab dikurang 1
		Event.observe(tabID,'click', // apabila tab di click maka tampilkan content-nya
				function(){
					(new T10Tabs()).showTab(index);
				}
		 	);
	},
	setNormalStyle: function(tabID){ // ubah menjadi style normal (belum diseleksi)
		$(tabID).setStyle({
				padding: '4px',
				border: '1px solid #000',
				backgroundColor: '#FFF',
				float: 'left', // diberi nilai float agar element merata ke kiri (walaupun element tsb adalah div)
				marginLeft: '1px', // memberi jarak antar tab (anda bisa custom sendiri)
				cursor: 'pointer',
				position: 'relative', // nilai ini harus ada untuk pengaturan tab selected nantinya
				zIndex: 5, // untuk mengedepankan element tab agar bisa 'menindih' content tab pada saat diseleksi
				top: '1px' // akan diubah menjadi 2px apabila tab tsb dipilih (sudah terseleksi)
			});	
	},
	setSelectedStyle: function(tabID){ // ubah menjadi style selected (sudah terseleksi)
		$(tabID).setStyle({
				top: '2px', // dengan sendirinya tab tsb 'menindih' element content sehingga kelihatan menyatu dengan content tsb
				backgroundColor: '#B4D4F1', // background disamakan dengan background content agar kelihatan seperti menyatu
				borderBottom: '0px' // dikosongkan border bottom agar tab dengan content tidak ada garis pemisah dan kelihatan menyatu
			});	
	},
	showTab: function(index){
		if(T10Tabs.tab_id[index] == undefined) return; // jika tab dengan index yg disebut tidak ada maka tidak mengerjakan apa-apa
		T10Tabs.tab_id.each( // semua tab di jadikan style normal terlebih dahulu
				function(element){
					(new T10Tabs).setNormalStyle(element);
				}
			);		
		T10Tabs.tab_content.each( // semua tab content di sembunyikan terlebih dahulu
				function(element){
					$(element).hide();
				}
			);
		this.setSelectedStyle(T10Tabs.tab_id[index]); // jadikan tab dengan index yg dikirimkan dengan style selected tab
		$(T10Tabs.tab_content[index]).show(); // tampilkan content tab
 
		/* simpan tab yang sedang aktif dengan cookie
		   sehingga ketika di refresh dapat kembali ke tab terakhir */
		var currentDate = new Date();
		currentDate.setDate( currentDate.getDate() + 2 ); // set expired date sampai dengan tanggal besok
		document.cookie = this.cookieName+"="+index+"; expires="+currentDate.toGMTString()+"; path=/";
	},
	getLastTab: function(){ // fungsi untuk mendapatkan tab terakhir
	  var results = document.cookie.match ( '(^|;) ?' + this.cookieName + '=([^;]*)(;|$)' );
	  if ( results )
		return ( unescape ( results[2] ) );
	  else
		return 0;		
	},
	cookieName: 'tabCookie' // nama cookie untuk menyimpan tab yang sedang aktif
  }
);
T10Tabs.tab_id = []; // untuk menyimpan data tab secara array numeric
T10Tabs.tab_content = []; // untuk menyimpan data content tab secara array numeric

Untuk penggunaannya anda tinggal siapkan element-element yang akan dijadikan TAB dan CONTENT TAB seperti di bawah ini.

22
23
24
25
26
27
 <div id="tab1">Tab 1</div>
 <div id="tab2">Tab 2</div>
 <div id="tab3">Tab 3</div>
 <div id="content1"><h1>CONTENT 1</h1></div>
 <div id="content2"><h1>CONTENT 2...</h1></div>
 <div id="content3"><h1>CONTENT 3...</h1></div>

Lalu setup tab pada saat dokumen selesai di load.

6
7
8
9
10
11
12
13
14
   window.onload = function(){
   	var tab = new T10Tabs();
   	tab.addTab('tab1','content1');
   	tab.addTab('tab2','content2');
   	tab.addTab('tab3','content3');
	/* load tab berdasar tab yang aktif terakhir kali sebelum di-refresh
	   default tab adalah 0 atau tab paling pertama */
   	tab.showTab(tab.getLastTab());
   }

Update 15 April 2009: Kini ketika halaman di-refresh maka tab yang aktif akan otomatis berada pada tab yang anda pilih terakhir kali.

Untuk demo script diatas anda bisa melihat di link ini

Untuk men-download script keseluruhan klik link ini

Semoga bisa bermanfaat… ^_^

(11 votes, average: 4.18 out of 5) KurangBiasaLumayanBagusLuar Biasa
Loading ... Loading ...
  1. January 9th, 2009 at 17:32 | #1

    wah numpang baca tips2 nya yah mas…. wah jadi banyak wawasan ni,, jadi pengen kaya mas chandra…. hehehheheh

    sukes selalu yah mas,….

    BTW aku mau tanya kalo tabs menunya itu gak perlu di klik gimana caranya yah mas… jadi saat mouseover gitu…
    mohon bimbingannya :D

    sukses mas chandra

  2. January 16th, 2009 at 16:33 | #2

    4 tahun di bidang programming wow..
    kereeeen….. udah expert nie pastinya…

    makasih tutorialnya ya om…..

  3. March 17th, 2009 at 00:59 | #3

    bang kalo misale dia ditaruh di dalam div nya div, maksude iku di dalam div top -> left gmn pengaturannya.. kalo yang anda buat kan di dalam body aja .

  4. March 17th, 2009 at 09:44 | #4

    gak masalah kok mas… coba aja syntax html tab dan content tab di taro di dalam sebuah div. kan intinya ketika kita ingin buat tab cukup identifikasikan id dari tab dan content-nya

    tab.addTab('tab1','content1');
  5. March 18th, 2009 at 00:15 | #5

    terima kasih pak
    saya sangat tertolong

  6. March 19th, 2009 at 02:10 | #6

    yang kemarin udah bisa pak, tapi di website saya kan ada javscript load image juga , nah disitu permasalahannya. ketika saya run lagi ternyata yang muncul adalah tabbingnyya, sedangkan load image nya ga bisa muncul, bagaimana cara mengatasi hal ini?, atas perhatianya terimakasih

  7. April 15th, 2009 at 02:15 | #7

    yaah.. coy …

    smuanya sama aja..

    setiap aq nge-refresh halaman, si tabnya kembali ke tab1
    nah gmn ya caranya spya si tab itu ga kembali ke tab1 !!!

    mohon pencerahannya

    -_-

  8. April 15th, 2009 at 02:32 | #8

    ha ha ha…

    berusan aq dah dapet tab yg kalo direfresh, ga kembali ke tab pertama..
    :p

    ini dia linknya :
    http://www.blog.highub.com/id/php/php-solutions/php-tabbed-views/

  9. April 15th, 2009 at 03:50 | #9

    ok mas udah saya update scriptnya agar ketika di-refresh kembali ke tab terakhir. saya pake cookie biar gak ribet spt referensi yang mas kasih.
    thanks atas masukannya.

  10. May 15th, 2009 at 17:20 | #10

    Berkunjung dan baca infonya, mudah-mudahan bermanfaat bagi banyak orang, sukses ya.
    I Like Relationship.

  11. May 24th, 2010 at 02:31 | #11

    Mas, mohon bimbingan untuk menjadi programmer handal…

  1. No trackbacks yet.