Friday, January 18, 2013

Efek Animasi Loading dengan Event `beforeunload`

Loading

Sebelumnya Saya pernah menuliskan cara membuat efek animasi loading pada saat halaman berpindah dengan cara menyeleksi semua tautan internal untuk memicu tampilnya overlay/tabir animasi saat tautan tersebut diklik. Tapi metode ini memiliki dua kelemahan:

Pertama, menyeleksi semua tautan internal dengan selektor atribut sebenarnya tidak begitu baik karena selektor atribut itu performanya buruk.

Ke dua, jika kita mengeklik tautan internal yang memiliki atribut target='_blank' di dalamnya, tautan tersebut akan terbuka di tab baru. Tapi efek animasi memuat halaman justru terpicu pada halaman sebelumnya, padahal kita tidak menghendaki itu ⇒ #c8644667892985451185. Saya sudah berhasil mengakalinya dengan cara memfilter tautan internal tersebut dengan cara mengecualikan tautan yang memiliki atribut target='_blank' menggunakan jQuery .filter():

$internalLinks.filter(':not([target="_blank"])').click(function() {});

Tapi mulai sekarang lebih baik kita lupakan cara lama tersebut. Kita bisa menciptakan efek animasi perpindahan halaman dengan aman menggunakan event beforeunload.

beforeunload adalah event yang akan terpicu saat sebuah halaman mulai berpindah karena seorang pengguna mengeklik tautan tertentu (atau sekedar memuat ulang halaman dengan cara mengeklik tombol Reload pada peramban) yang memicu mereka untuk keluar dari halaman tersebut:

$(window).on("beforeunload", function() {
    // Menampilkan tabir animasi dengan efek `.fadeIn()`...
});

Kali ini tabir animasi ditampilkan bukan karena terpicu oleh aksi klik pada tautan melainkan karena aksi halaman yang mulai berpindah. Sehingga kita bisa merancang ulang tabir animasi perpindahan halaman dengan cara ini:

Anggaplah jQuery sudah terpasang di blog kita. Pertama, masuklah ke halaman editor HTML template, kemudian letakkan kode CSS ini di atas ]]></b:skin> atau </style>:

#page-loader {
  position:fixed !important;
  position:absolute;
  top:0;
  right:0;
  bottom:0;
  left:0;
  z-index:9999;
  background-color:black;
  color:white;
  padding:1em 1.2em;
  display:none;
}

Kemudian sisipkan kode ini di atas </body>:

<script>
//<![CDATA[
// Menyisipkan markup tabir animasi
$(document.body).append('<div id="page-loader">Loading...</div>');
// Saat halaman terpicu untuk berpindah/keluar menuju halaman lain...
$(window).on("beforeunload", function() {
    // ... tampilkan tabir animasi dengan efek `.fadeIn()`
    $('#page-loader').fadeIn(1000).delay(6000).fadeOut(1000);
});
//]]>
</script>

Klik Simpan Template.

Demo

Lihat Demo

Labels: , ,

49 Comments:

At Friday, January 18, 2013 at 8:30:00 PM GMT+7, Blogger Beben Koben said...

wah!!! apa-apan ini www.dte.web.id
keknya baru??? :-bd :Q

 
At Friday, January 18, 2013 at 8:34:00 PM GMT+7, Blogger Adi Nugraha Y said...

Makasih ya mas :D

 
At Friday, January 18, 2013 at 8:57:00 PM GMT+7, Blogger tes said...

bro jika saya mau menambahkan sedikit animasi2 gitu gimana caranya ya ? supaya terlihat lebih keren dan menarik lagi

 
At Friday, January 18, 2013 at 9:12:00 PM GMT+7, Blogger IRIL SAGITA said...

Kak, kok aku malah gak berhasil nerapin yang baru ini, tapi yang lama malah bisa ?

 
At Friday, January 18, 2013 at 9:19:00 PM GMT+7, Blogger Taufik Nurrohman said...

Tinggal dikreasikan sendiri. Misalnya diberi latar animasi:

#page-loader {
position:fixed !important;
position:absolute;
top:0;
right:0;
bottom:0;
left:0;
z-index:9999;
background:yellow url('img/loading.gif') no-repeat 50% 50%;
font:0/0 a;
text-shadow:none;
padding:1em 1.2em;
display:none;
}


Demo: http://jsfiddle.net/tovic/78pNK/1/

 
At Friday, January 18, 2013 at 9:21:00 PM GMT+7, Blogger IRIL SAGITA said...

Pa mungkin blog aku gak suport ama :
$(document.body)

soalnya pada emoticon yang ada code $(document) juga gak bisa berfungsi, mohon kak taufik bantuannya ?

 
At Friday, January 18, 2013 at 9:28:00 PM GMT+7, Blogger Taufik Nurrohman said...

document.body itu sangat mendasar, seharusnya sih bisa. Mungkin kamu memakai versi JQuery yang lama, yang tidak mendukung .on(). Sekarang malah sudah update ke versi 2.0.0b. Cuma mungkin, karena masih belum stabil jadi Saya belum berani ganti. Di halaman demo Saya memakai versi 1.9.0

 
At Friday, January 18, 2013 at 9:35:00 PM GMT+7, Blogger IRIL SAGITA said...

jQuery yang mana kak yang harus di ganti, kalau anda berkenan mohon untuk melihat di :

sagitasoft.com

 
At Friday, January 18, 2013 at 10:32:00 PM GMT+7, Blogger IRIL SAGITA said...

Apakah jQuery versi 1.7.1 belum mendukung kak, saya memakai versi itu ?

 
At Saturday, January 19, 2013 at 7:36:00 AM GMT+7, Blogger Taufik Nurrohman said...

Hehehe... jangan dipasang sekaligus begitu...

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js' type='text/javascript'></script>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js' type='text/javascript'></script>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js' type='text/javascript'></script>


Ambil saja salah satu versi yang terbaru, lalu buang sisanya:

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js' type='text/javascript'></script>

 
At Saturday, January 19, 2013 at 9:46:00 AM GMT+7, Blogger IRIL SAGITA said...

Oh iya, maaf kak memang kesalahannya ada di situ, and sekarang udah berhasil. :D

makasih banget kak taufik ?

 
At Sunday, January 20, 2013 at 3:16:00 PM GMT+7, Blogger Secret Blog said...

mas, kok saya gagal ya?

terus ketika pasang jquery 1.9.0 kok fitur slide panel komentar jadi g berfungsi?

 
At Sunday, January 20, 2013 at 9:55:00 PM GMT+7, Blogger Taufik Nurrohman said...

Pakai cara sebelumnya saja kalau cara ini tidak berhasil.

 
At Thursday, January 31, 2013 at 11:34:00 AM GMT+7, Blogger Unknown said...

maksih gan infonya,saya akan belajar banyak dari sini :)

 
At Friday, February 1, 2013 at 3:18:00 PM GMT+7, Blogger obengkumana said...

baru ketemu web ini. dari kemarin2 hanya bisa ber-angan2 memliki blog dengan fitur web standar yg dilengkapi jquey, ajax dkk. :-bd salam kenal, dari pendatang baru. template om sedkit saya modifkasi menambahkan fixed top menu > blog.obengkumana.com,

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

Ehm... itu bukan template buatan Saya. Saya jarang membuat template. Mungkin punya Satank Mkr. Salam kenal juga.

 
At Monday, February 25, 2013 at 10:24:00 PM GMT+7, Anonymous Anonymous said...

permisi mas ,
pengen tanya ,
kenapa yah efek loading ini tidak bisa atau sama sekali tidak bisa dimasukkan elemen css lainnya ,
seperti css loading ,
seperti demo ini : http://www.alessioatzeni.com/wp-content/tutorials/html-css/CSS3-loading-animation-loop-set2/index.html

kenapa gak bisa yah mas..?
need help :)

 
At Tuesday, February 26, 2013 at 8:28:00 AM GMT+7, Blogger Taufik Nurrohman said...

Letakkan kode HTML di dalam <div id="page-loader"></div>, dan sertakan kode CSS animasi loading di halaman tersebut di bawah kode CSS yang Saya tuliskan.

 
At Wednesday, March 6, 2013 at 7:03:00 PM GMT+7, Anonymous Anonymous said...

wuih keren tapi url gambar yang bagus cari dimana yah ? :-a

 
At Thursday, March 21, 2013 at 5:13:00 PM GMT+7, Blogger Bima A. said...

gan kok di blog saya jadi tulisan loading... gak seperti di demo ?

 
At Thursday, March 21, 2013 at 11:40:00 PM GMT+7, Blogger Unknown said...

Mas template ku HTML Valide 5 jadi ga ada jquery nya Gimna masangin jquery di HTML valide 5!

 
At Friday, March 22, 2013 at 2:29:00 PM GMT+7, Blogger Taufik Nurrohman said...

JQuery tidak akan mempengaruhi validasi.

 
At Tuesday, March 26, 2013 at 2:26:00 PM GMT+7, Blogger Unknown said...

mas, mau tanya aku udah praktekin cara ini tapi hanya bisa berhasil saat klik link dari homepage saja, sedang saat di halaman lain tetep loading seperti biasa, cara mengatasinya bagaimana ya mas??? makasih ya sebelumnya... :)

 
At Tuesday, March 26, 2013 at 8:17:00 PM GMT+7, Blogger Dixy said...

pakek css aja...
lebih keren... :p

 
At Wednesday, March 27, 2013 at 8:18:00 AM GMT+7, Blogger Taufik Nurrohman said...

Mungkin kode CSS-nya keliru dimasukkan ke dalam tag <style> yang berada di dalam tag kondisional.

 
At Wednesday, March 27, 2013 at 9:02:00 AM GMT+7, Blogger Unknown said...

iya mas, tp kalo saya letakkan diatas ]]> juga ga bisa bahkan di homepage nya pun hanya loading seperti biasa...

 
At Wednesday, March 27, 2013 at 3:11:00 PM GMT+7, Blogger Unknown said...

mas, udah bisa kok tapi saya pake tutor yang menggunakan jQuery kalau yg ini udah dicoba beberapa kali ga bisa juga...:) makasih ya mas...

 
At Tuesday, April 30, 2013 at 7:46:00 AM GMT+7, Blogger Unknown said...

Mas saya udh pasang.
mau tanya ni,
sama kyk prtanyaan Mas "Jefrry, dsitu mas kan udh jawab tu prtnyaanya. Nah saya udh coba mas. Tapi kok animasi loadingnya gamuncul :'(

 
At Tuesday, April 30, 2013 at 9:46:00 AM GMT+7, Blogger Taufik Nurrohman said...

Mungkin ini terkait ⇒ /2011/12/membuat-efek-animasi-loading-sederhana.html?showComment=1366260641986#c7531280663956572640

 
At Tuesday, April 30, 2013 at 1:38:00 PM GMT+7, Blogger Unknown said...

masi gabisa mas.
.. Ok lah mas gpp. Terima Kasih. :)

 
At Tuesday, June 4, 2013 at 5:39:00 AM GMT+7, Anonymous Anonymous said...

Asiik udah berhasil gan cakep :D

 
At Tuesday, June 4, 2013 at 11:18:00 AM GMT+7, Blogger Kang Ismet said...

Bisa dibuat pengecualian ga gan? soalnya saya pasang animasi loading pada form komentar, pas komentar di publish, jadi ada dua gitu efek loadingnya.

 
At Sunday, June 9, 2013 at 8:58:00 PM GMT+7, Blogger Unknown said...

Work mas, hehehehe thank's \o/

 
At Thursday, June 13, 2013 at 6:51:00 PM GMT+7, Blogger Admine said...

gila ga kepikiran ya... bagus banget :-bd \o/
terima kasih mas Taufik Nurrohman

 
At Sunday, June 16, 2013 at 8:40:00 PM GMT+7, Blogger Wildan MR said...

Wah gan ane ga work di website , emang jquerynya pake versi yang mana?

 
At Sunday, June 16, 2013 at 8:57:00 PM GMT+7, Blogger Wildan MR said...

Kalo di blog sih ada , tapi buat di halaman offline(pake jquery 1.8.3.min) . Tetep ga muncul gan

 
At Wednesday, June 19, 2013 at 5:57:00 PM GMT+7, Blogger ricology said...

mas, disaya ga keluar animasi loadingnya... :(

 
At Friday, July 19, 2013 at 9:18:00 AM GMT+7, Blogger Unknown said...

thank for this post http://www.dte.web.id/2013/01/efek-animasi-loading-dengan-event.html

 
At Monday, July 29, 2013 at 12:11:00 PM GMT+7, Blogger Sugrahaku said...

mas, di blog saya kok effect ny ga bisa ya? kesalahan dmn? bisa tolong di cek T.T
sugrahaku.com

 
At Wednesday, August 28, 2013 at 2:06:00 PM GMT+7, Blogger Unoz said...

=p* makasih mas salam kenal, visit back blog baruku cms-teknologi.blogspot.com

 
At Saturday, September 7, 2013 at 8:46:00 AM GMT+7, Blogger Unknown said...

Berhasil gan,

ngomong-ngomong kalau mau ganti effect animasi gmn ya gan ? ~x(

 
At Saturday, September 7, 2013 at 4:09:00 PM GMT+7, Blogger Unknown said...

This comment has been removed by the author.

 
At Saturday, September 7, 2013 at 7:34:00 PM GMT+7, Anonymous Anonymous said...

bisa lihat komentar disini masbero http://www.dte.web.id/2013/01/efek-animasi-loading-dengan-event.html?showComment=1358518741306#c8005670485318104370

 
At Saturday, September 14, 2013 at 3:28:00 PM GMT+7, Blogger Unknown said...

mantap gan, kunjungi juga ya blog saya http://www.prediksibola888.blogspot.com/

 
At Sunday, September 15, 2013 at 7:09:00 PM GMT+7, Blogger Unknown said...

mas mau nanya apakah dengan memakai ini akan mempercepat loading blog juga mas? seperti lazyload?

 
At Wednesday, September 18, 2013 at 3:02:00 AM GMT+7, Blogger Taufik Nurrohman said...

Tidak. Ini cuma efek.

 
At Sunday, November 3, 2013 at 7:39:00 AM GMT+7, Blogger Unknown said...

Saya cari" di google muter" akhirnya ketemu juga di sini kang... makasih kang

 
At Thursday, December 12, 2013 at 10:59:00 AM GMT+7, Blogger Dwi said...

makasih mas ;)

 
At Sunday, April 6, 2014 at 11:57:00 AM GMT+7, Blogger Unknown said...

mana ya cara yng sebelumnya??

 

Post a Comment

<< Home