Wednesday, January 4, 2012

Membuat Animasi Loading dengan jQuery · Bagian 2

Loading Page

Efek loading/pemuatan halaman yang satu ini bukan dipicu berdasarkan aksi klik pada tautan internal seperti pada artikel sebelumnya, namun dipicu berdasarkan selesainya pemuatan halaman:

Lihat Demo

Kuncinya sangat sederhana. Dengan menggunakan potongan kode ini, Saya akan menjalankan fungsi .fadeOut() pada overlay/tabir hanya pada saat halaman telah selesai dimuat:

$(window).bind("load", function() {
    ...
});

Pekerjaan berikutnya hanya tinggal menciptakan tabir dengan elemen <div>, kemudian atur agar lebar dan tingginya cukup untuk menutupi seluruh jendela. Letak yang ideal adalah di bawah <body>:

HTML

<div id='loading-overlay'>Loading...</div>

CSS

#loading-overlay {
  width:100%;
  height:100%;
  position:fixed !important;
  position:absolute; /* IE6 Fallback */
  top:0;
  right:0;
  bottom:0;
  left:0;
  z-index:999999;
  background:#3A3A3A url('https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJueqs5HCmWjFloC5fWcuS-Efz706MUYcnJahYRMWeYO8JrOb_AuzcVVJQUkn07BAJNSXmF8_Y1u7uVjK-cav3OJ4F49DzIroGvJ2xhAEL2GX4067jmNsa17hgB_yXLF1U_vbSmBbFczQ/s1600/layer-loading.gif') no-repeat 50% 50%;
  font:normal normal 0/0 a;
  color:transparent;
  text-shadow:none;
}

Kemudian bangun fungsi jQuery yang akan menghilangkan tabir hanya jika keseluruhan halaman telah selesai dimuat:

// hilangkan overlay dengan efek .fadeOut() jika keseluruhan halaman telah selesai dimuat
$(window).bind("load", function() {
    $('#loading-overlay').fadeOut();
});

Pahami Resiko

Resiko saat menerapkan efek ini adalah, jika script gagal terakses, tabir tidak akan bisa menghilang dan akan terus menutupi seluruh halaman Anda. Tapi itu bisa diatasi dengan cara menyisipkan kode CSS yang menyatakan bahwa tabir akan disembunyikan jika JavaScript dinonaktifkan. Caranya adalah dengan menggunakan tag <noscript> seperti ini:

<noscript>
<style>
#loading-overlay {display:none}
</style>
</noscript>

Letakkan kode tersebut di atas </head>

Labels: ,

24 Comments:

At Friday, April 13, 2012 at 5:39:00 AM GMT+7, Blogger ricco said...

mantap kawand tutorial2nya..
keep sharing..
dan ane tinggal mantau aja.. :)

 
At Saturday, May 5, 2012 at 11:14:00 AM GMT+7, Blogger Unknown said...

naruh kodenya gimana mas taufikkkk...???? X@ X@ X@

Contoh resikonya gimana mas taufik,,, mohon di jelaskan :D :D :D

 
At Saturday, May 5, 2012 at 1:03:00 PM GMT+7, Blogger Taufik Nurrohman said...

@trii waluyo Coba nonaktifkan JavaScript di peramban yang kamu pakai:

http://1.bp.blogspot.com/-xId2grkLeA4/T3GABmsVgTI/AAAAAAAACZs/hSFtEMjvN0A/s1600/disable-the+javascript.png

Lalu muat ulang halaman demonya sekali lagi :drummer:

 
At Saturday, May 19, 2012 at 1:51:00 AM GMT+7, Blogger Unknown said...

@Taufik Nurrohman Q dah jadi si mas,, tapi loadingnya lama banget...
Mungkin gara-gara widget tertentu yang belum berhasil selesai dimuat jadi loadingnyA belum selesai... :(

Hmm,,,
Q kepenginnya loading ini supaya tidak halaman selesai dimuat mas ???
Paling loadingnya cuma beberapa detik aja ???
Q mau ngutak ngutik kode jQuerynya ga bisa mas ??? :'(

Mohon pencerahannya

 
At Saturday, May 19, 2012 at 9:17:00 AM GMT+7, Blogger Taufik Nurrohman said...

@trii waluyo Terapkan setTimeout(), lupakan $(window).bind("load")

setTimeout(function() {
$('#loading-overlay').fadeOut();
}, 5000); // Akan menghilang dalam waktu 5 detik


Demo: http://jsfiddle.net/tovic/JknDk/

 
At Saturday, May 19, 2012 at 10:30:00 AM GMT+7, Blogger Unknown said...

@Taufik Nurrohman Q dah coba tetep ga bisa,, nunguin 5 detk malah ga ilang ilang tuh gambar...
Mungkin karena template aku si...

Lagian kalau dpasang ini,, slider aku pada hompage tetep aja ga ketutup, malah loadingnya yang ketutup sama slidernya

http://2.bp.blogspot.com/-A5suyorNag0/T7cRslf8SpI/AAAAAAAAAmY/iuqIsboydNA/s400/Image+4.jpg

Gambar diatas loading yang sudah di terapkan diblog aku mas,, aku dah nungguin 5 detik malah ga ilang-ilang tu gambarnya...
Screenshot itu pun kalau q dah gulir kebawah,, kalau belum malah ketutup slidernya...

Q dah naruh jQuery sama HTMLnya,, jadi kaya gini

setTimeout(function() {
$('#loading-overlay').fadeOut();
}, 5000);
</head>
<div id='loading-overlay'>Loading...</div>
<body expr:class='&quot;loading&quot; + data:blog.mobileClass'>
<div id='header-wrapper'>


nyari kode <body> ga ada mas,,
adanya

<body expr:class='&quot;loading&quot; + data:blog.mobileClass'>
<div id='header-wrapper'>
<b:section class='header' id='header' maxwidgets='1' showaddelement='no'>
<b:widget id='Header1' locked='true' title='Mob3se7en™ (Header)' type='Header'>
<b:includable id='title'>
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<data:title/>
<b:else/>
<a expr:href='data:blog.homepageUrl'><data:title/></a>
</b:if>
</b:includable>
<b:includable id='description'>
<data:description/>
</b:includable>
<b:includable id='main'>


:)

 
At Saturday, May 19, 2012 at 12:54:00 PM GMT+7, Blogger Taufik Nurrohman said...

@trii waluyo Itu sama saja, sama-sama tag <body>
Jangan lupa kodenya diletakkan di dalam $(function() {}) dan di dalam tag <script>:

<script type='text/javascript'>
//<![CDATA[
$(function() {
setTimeout(function() {
$('#loading-overlay').fadeOut();
}, 5000);
});
//]]>
</script>

 
At Saturday, May 19, 2012 at 9:41:00 PM GMT+7, Blogger Unknown said...

@Taufik Nurrohman Alhamdulialh mas taufik,, akhhirnya jadi juga... ;) \m/

Oh ya mas,, aku punya ide nie mas,, kira-kira loading ini bisa ga ya supya jangan tampil pada saat membuka halaman hompage ??? Q penginnya loading ini ga usah tampil pada saat hompage... Cuma pada artikel saja,


Soalnya kalau loading pada saat homepage aku tuh gambar loadingya ketutup efek slider trus menu fly out CSS3nya juga ga ketutup...

Gimana ya mas,,, ??? :-bd

Mohon pencerahannya :)

 
At Saturday, May 19, 2012 at 10:13:00 PM GMT+7, Blogger Taufik Nurrohman said...

@trii waluyo Oya, maaf. Itu Salah Saya. Saya lupa menuliskan z-index di sini:

#loading-overlay {
width:100%;
height:100%;
position:fixed !important;
position:absolute; /* IE6 Fallback */
top:0px;
right:0px;
bottom:0px;
left:0px;
z-index:999999;
background:#3A3A3A url(http://3.bp.blogspot.com/-_ONDmjNBMJs/TwPCL3AdlII/AAAAAAAAB4c/02MboPkAHGg/s1600/layer_loading.gif) no-repeat center;
color:transparent !important;
text-indent:-99999px;
}


Sekarang seharusnya semua elemen akan tertutup tabir.

 
At Sunday, May 20, 2012 at 2:51:00 AM GMT+7, Blogger Unknown said...

@Taufik Nurrohman Berhasil mas,, tapi fly out cssnya ga ketutup...
Paling perbedaan kalau sudah dikasih z-index:999999; Read morenya ketutup sama back to top...
fly out cssnya ga ketutup mas,, :(

Apa emang dari sananya ya mas,, ???

 
At Sunday, May 20, 2012 at 3:49:00 PM GMT+7, Blogger Taufik Nurrohman said...

@trii waluyo Diperbesar saja nilainya, atau perkecil z-index pada menu Fly-Out.

[note]Terkait: CSS3 Fly Out Menu[/note]

 
At Sunday, May 20, 2012 at 5:14:00 PM GMT+7, Blogger Unknown said...

@Taufik Nurrohman Oh ya mas,,,
z-index:999999; apa si mas ???
Penjelesannya apa mas taufik,, ???
Q pengin tahu lebih dalam tentang z-index:999999; :-bd

Di Fly Out CSS3 juga ada kode z-index:999999; nya ...

 
At Sunday, May 20, 2012 at 6:02:00 PM GMT+7, Blogger Taufik Nurrohman said...

@trii waluyo [note]Baca: CSS Position[/note]

 
At Thursday, July 19, 2012 at 12:09:00 AM GMT+7, Blogger Surga Kenari said...

z-index itu semacam tiban meniban...

jadi semakin besar angka nya

semakin dia di atas / di luar tampilannya

kalo angkanya di perkecil, dia semakin di dalem / di bawah

 
At Thursday, July 19, 2012 at 12:16:00 AM GMT+7, Blogger Surga Kenari said...

mas Taufik Nurrohman, punya saya kok yg nampil background nya dulu setelah itu baru gambar loadingnya?

 
At Thursday, July 19, 2012 at 12:36:00 AM GMT+7, Blogger Taufik Nurrohman said...

Latar lebih cepat terlihat dibandingkan gambar. Semakin besar gambar, semakin lama terlihat.

 
At Thursday, July 19, 2012 at 1:44:00 PM GMT+7, Blogger Surga Kenari said...

oh gtu ya mas,

mas Taufik blognya sangat ringan sekali saya rasakan..

mas coba bisa review blog saya sdkit? blog saya sudah ringan atau masih terlalu berat?


ada tips buat saya supaya lebih ringan sprti blog mas Taufik ?

 
At Thursday, July 19, 2012 at 2:41:00 PM GMT+7, Blogger Taufik Nurrohman said...

Hmh... Mungkin karena Saya jarang mampir jadi terasa agak lambat. Blog Saya rasanya cepat & ringan soalnya sering dikunjungi, jadi cache-nya sering tersimpan di peramban pengunjung. Yang penting ketahui semua bagian/widget yang memakan waktu, pelajari durasinya, tentukan prioritasnya :W

 
At Thursday, August 23, 2012 at 1:30:00 PM GMT+7, Blogger Taufik Nurrohman said...

Yep. Kalau tidak salah.

 
At Friday, February 1, 2013 at 8:23:00 PM GMT+7, Blogger Taufik Nurrohman said...

Coba set margin menjadi nol:

#loading-overlay {
margin:0 0;
}

 
At Sunday, February 10, 2013 at 8:24:00 AM GMT+7, Blogger Unknown said...

nah mas taufik, gimana kalo seandainya hanya ditampilkan saat pengunjung pertama kali membuka blog kita saja, tapi loading gak akan ditampilkan lagi jika pengunjung tersebut pindah halaman ^_^

 
At Sunday, February 10, 2013 at 12:37:00 PM GMT+7, Blogger Taufik Nurrohman said...

Pakai Cookies:

if (readCookie('first-visit')) {
$('#loading-overlay').remove();
} else {
createCookie('first-visit', null, 1); // satu hari
}

 
At Saturday, May 11, 2013 at 1:02:00 AM GMT+7, Blogger EM said...

nah untuk membuat efek loading seperti pada blog ini caranya bagaimana mas?
apa blog ini juga memakai script tersebut di atas?

 
At Monday, July 7, 2014 at 8:19:00 PM GMT+7, Blogger Yoshiewafa said...

Bagus mas tutorialnya :D, boleh dicoba nih.

 

Post a Comment

<< Home