Di panduan ini kita akan membangun sebauh situs dengan transisi halaman yang halus dan indah tanpa penyegaran halaman yang biasanya agresif. Bernavigasilah di demo halaman untuk melihat apa yang saya maksud. Show Untuk meraih efek ini kita akan menggunakan History Web API. Singkatnya, API ini digunakan untuk merubah riwayat browser. Dia mengizinkan kita untuk memuat sebuah URL baru, mengganti judul halaman, dan pada saat yang sama merekamnya sebagai sebuah kunjungan ke browser tanpa benar-benar memuat lamannya. Ini terdengar membingungkan, tapi dia membuka beberapa kesempatan untuk menyajikan transisi laman secara lebih halus dan memberimu sensasi cepat yang meningkatkan pengalaman pengguna. Kamu mungkin telah menyaksikan aksi History Web API di beberapa situs ada aplikasi seperti Trello, Quartz, dan Privacy. Situs Quartz yang entah abstrak (entah bagus juga).Sebelum kita pergi lebih jauh, mari lihat ke API yang akan kita luncurkan di situs. History Web API Secara SingkatUntuk mengakses Web History API, pertama kita menulis 128 dan diikuti dengan salah satu API-nya; atau . Di panduan ini kita akan fokus pada metode 129, sehingga. 1 window.history.pushState( state, title, url ); Seperti yang bisa kamu lihat dari intipan di atas, metode 130 memiliki tiga parameter.
Mari bedah contoh berikut untuk memahami lebih baik cara kerja metode 129. 1 (function( $ ){ 2 3 $( "a" ).on( "click", function( event ) { 4 5 event.preventDefault(); window.history.pushState( state, title, url );0 window.history.pushState( state, title, url );1 window.history.pushState( state, title, url );2 window.history.pushState( state, title, url );3 window.history.pushState( state, title, url );4 window.history.pushState( state, title, url );5 window.history.pushState( state, title, url );6 window.history.pushState( state, title, url );7 Pada kode di atas, sebuah tautan terlampir dengan event 136lalu meluncurkan metode 129. Saat kita menekan tautan, kita berharap kode untuk merubah judul dan URL dokumen. DAn dia melakukannya; screenshot menunjukkan URL-nya berubah ke "about/" seperti yang didefinisikan metode 129. Dan karena motede 130 membuat rekaman baru di riwayat browser, kita bisa kembali ke halaman sebelumnya melalui tombol Back browser. Namun, semua browser di contoh ini menolak parameter 133. Kamu bisa melihat dari screenshot. Dokumennya tidak berubah menjadi About - Acme seperti yang dispesifikasikan. Lebih lanjut lagi, memanggil metode 129 tidak akan memicu event 142; sebuah event yang dikirim tiap kali riwayat berubah-terkadang kita butuh! Ada beberapa perbedaan cara browser menangani event ini, seperi yang dinyatakan di MDN. "Broswer cenderung untuk menangani event143secara berbeda saat memuat laman. Chrome (sebelum v34) dan Safari selalu mengeluarkan event143saat memuat laman namun Firefox tidak. Kita memerlukan sebuah pustaka sebagai posisi mundur untuk membuat History Web API bekerja secara konsisten di antara browser tanpa rintangan. Berkenalan Dengan History.jsSemenjak metode 129 tidak bekerja sesuai potensinya, di panduan ini kita akan menggunakan History.js Seperti yang namanya implikasikan, pustaka JavaScript ini adalah sebuah polyfill, mereplika History API yang bekerja di browser berbeda. Sehingga juga mengekspos sekumpulan metode yang dimiliki API bawaan, meskipun dengan beberapa perbedaan. Seperti yang disebutkan sebelumnya. API bawaan browser dipanggi melalui jendela 146dengan huruf "h" kecil, sementara History.js API diakses melalui 147dengan huruf "H" besar. Memberikan contoh sebelumnya dan berasumsi bahwa kita memiliki berkas history.js termuat. Kita bisa merevisi kodenya agar sesuai (perhatikan huruf "H" besar). 1 window.history.pushState( state, title, url );9 Saya harap penjelasan singkatnya mudah dipahami. Jika tidak, berikut adalah beberapa referensi lebih lanjut jika kamu ingin mempelajari lebih mengenai Web History API.
Membangun Situs Statis KitaDi bagian ini kita tidak akan membahas tiap tahap yang dibutuhkan untuk membangun sebuah situs statis secara detil. Situs kita akan sederhana seperti yang tampakkan screenshot berikut: Beranda SitusKamu tidak perlu membuat sebuah situs yang terlihat persis sama; kamu bebas menambahkan konten apapun dan membuat halaman sebanyak yang kamu ingin. Namun, ada beberapa poin penting yang kamu perlu pertimbangkan terkait struktur HTML dan penggunaan atribut 148 dan 149untuk beberapa elemen.
Telah melakukannya semua, markup HTML kita akan tampak seperti berikut: 1 11 2 13 3 15 4 17 5 19 window.history.pushState( state, title, url );0 (function( $ ){1 window.history.pushState( state, title, url );1 (function( $ ){3 window.history.pushState( state, title, url );3 (function( $ ){5 window.history.pushState( state, title, url );5 (function( $ ){7 window.history.pushState( state, title, url );6 (function( $ ){9 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 (function( $ ){5 $( "a" ).on( "click", function( event ) {0 (function( $ ){7 $( "a" ).on( "click", function( event ) {2 $( "a" ).on( "click", function( event ) {3 $( "a" ).on( "click", function( event ) {4 23 $( "a" ).on( "click", function( event ) {6 25 $( "a" ).on( "click", function( event ) {8 27 40 41 42 43 44 45 46 47 Ketika kamu telah selesai membangun situs statismu kita bisa pindah ke bagian utama dari panduan ini. Menerapkan History Web APISebelum kita mulai menulis kode apapun, kita perlu membuat sebuah berkas baru untuk menyimpan JavaScript; kita akan menamainya script.js dan memuat berkasnya ke dalam dokumen sebelum tag penutup 157. Mari tambahkan pecahan pertama dari kode untuk mengubah judul dokumen dan URL saat menekan navigasi menu: 1 49 2 51 3 4 54 5 56 window.history.pushState( state, title, url );0 58 window.history.pushState( state, title, url );1 event.preventDefault();0 window.history.pushState( state, title, url );3 event.preventDefault();2 window.history.pushState( state, title, url );5 58 window.history.pushState( state, title, url );6 event.preventDefault();6 20 event.preventDefault();8 22 window.history.pushState( state, title, url );00 24 window.history.pushState( state, title, url );02 26 58 28 window.history.pushState( state, title, url );06 30 window.history.pushState( state, title, url );08 32 window.history.pushState( state, title, url );10 34 58 36 window.history.pushState( state, title, url );14 38 window.history.pushState( state, title, url );16 $( "a" ).on( "click", function( event ) {0 window.history.pushState( state, title, url );18 Saya telah membagi kodenya ke beberapa bagian. Ini akan membuatnya lebih mudah bagimu untuk menunjuk kode dengan referensi berikut:
Pada titik ini, ketika kita menekan menu navigasi, judul dan URL akan berubah sesuai yang ditunjukkan di bawah: Judul dan URL halaman berubahBahkan jika konten halamannya tetap sama! Dia tidak diperbaharui agar cocok dengan judul dan URL baru. KontenKita perlu menambah baris kode berikut untuk benar-beanr mengganti konten halaman. 1 49 2 window.history.pushState( state, title, url );22 3 58 4 window.history.pushState( state, title, url );26 5 window.history.pushState( state, title, url );28 window.history.pushState( state, title, url );0 58 window.history.pushState( state, title, url );1 event.preventDefault();0 window.history.pushState( state, title, url );3 window.history.pushState( state, title, url );34 window.history.pushState( state, title, url );5 window.history.pushState( state, title, url );6 window.history.pushState( state, title, url );37 20 window.history.pushState( state, title, url );39 22 window.history.pushState( state, title, url );41 24 window.history.pushState( state, title, url );43 26 window.history.pushState( state, title, url );45 28 window.history.pushState( state, title, url );47 30 window.history.pushState( state, title, url );49 32 34 window.history.pushState( state, title, url );4 36 window.history.pushState( state, title, url );18 Sekali lagi, kode di sini di bagi ke beberapa bagian.
Setelah ditambahkan, kontennya harusnya sekarang diperbaharui saat kita menekan menu navigasi. Seperti yang disebutkan, kita juga bisa mengakses halaman yang terkunjungi kembali melalui tombol Back dan Forward browser. Situs kita dapat ditampilkan pada titik ini. Namun, kita ingin melangkah lebih jauh dengan menambahkan sedikit animasi untuk membuat halannya jadi hidup dan akhirnya situs kita terasa lebih menarik. Menambahkan Animasi dan TransisiAnimasi pada situasi ini cukup sederhana, sehingga kita menulisnya dari awal daripada memuat animasi melalui pustakan seperi Animate.css, Motion UI dari ZURB, atau Effeckt.css. Kita akan menamakannya 171, seperti berikut: 1 window.history.pushState( state, title, url );56 2 window.history.pushState( state, title, url );58 3 window.history.pushState( state, title, url );60 4 window.history.pushState( state, title, url );62 5 window.history.pushState( state, title, url );02 window.history.pushState( state, title, url );0 window.history.pushState( state, title, url );66 window.history.pushState( state, title, url );1 window.history.pushState( state, title, url );68 window.history.pushState( state, title, url );3 window.history.pushState( state, title, url );70 window.history.pushState( state, title, url );5 window.history.pushState( state, title, url );02 window.history.pushState( state, title, url );6 window.history.pushState( state, title, url );74 Seperti yang diimplikasikan namanya, animasinya akan menggeser konten halaman dari bawah ke atas dengan elemen opacity. Terapkan animasinya ke elemen yang membungkus konten utama halaman seperti berikut. 1 window.history.pushState( state, title, url );76 2 window.history.pushState( state, title, url );78 3 window.history.pushState( state, title, url );80 4 window.history.pushState( state, title, url );82 5 window.history.pushState( state, title, url );74 Transisi dari satu halaman ke halaman lainnya akan terasa lebih harus saat animasinya diterapkan. Di sini, kamu bisa berhenti dan mengganpnya kerja seharian! Situs kita telah selesai dan kita siap meluncurkannya ke dunia untuk dilihat. Namun, adalah satu hal lagi yang perlu kamu pertimbangkan, terutama bagi yang ingin mengawasi jumlah pengunjung dan perilaku pengunjung situsmu. Kita perlu menambahkan pelacakkan Google Analytics ke tiap page view. Google AnalyticsSemenjak situs kita akan dimuat secara asinkron (kecuali untuk halaman yang dimuat di awal) melacak angka page view juga harus dilakukan secara asinkron. Untuk memulainya, pastikan kamu memiliki standar Google Analytics terpasang di 150dokumen. Kodenya biasanya terlihat seperti berikut: 1 window.history.pushState( state, title, url );86 2 window.history.pushState( state, title, url );88 3 window.history.pushState( state, title, url );90 4 window.history.pushState( state, title, url );92 5 window.history.pushState( state, title, url );94 window.history.pushState( state, title, url );0 window.history.pushState( state, title, url );1 window.history.pushState( state, title, url );97 window.history.pushState( state, title, url );3 window.history.pushState( state, title, url );99 window.history.pushState( state, title, url );5 window.history.pushState( state, title, url );6 102 Lalu kita perlu mengatur kode JavaScript kita untuk memasukkan kode pelacakkan Google Analytics sehingga tiap halaman yang dimuat secara asinkron akan dihitung sebagai page view juga. Kita memiliki beberapa pilihan. Pertama, kita bisa menghitung ketika pengguna menekan tautan navigasi, atau ketika mengganti judul dan URL halaman, atau ketika konten dari halaman telah sukses dimuat. Kita akan memilih yang terakhir, yang tampak paling otentik, dan untuk melakukannya kita akan menggunakan metode 173 jQuery setelah merubah konten halaman seperti berikut: 1 104 2 106 3 108 4 5 111 window.history.pushState( state, title, url );0 113 window.history.pushState( state, title, url );1 115 window.history.pushState( state, title, url );3 117 window.history.pushState( state, title, url );5 119 window.history.pushState( state, title, url );6 121 20 123 22 125 24 127 Begitulah, sekarang kita telah membuat page view terhitung di Google Analytics. KesimpulanDi Panduan ini kita telah meningkatkan sebuah situs statis sederhana menggunakan Web History API untuk membuat transisi halaman yang halus, memuatnya lebih cepat, dan secara keseluruhan membawa pengalaman yang lebh baik pada pengguna. Di akhir panduan ini, kita juga telah mengimplementasikan Google Analytics untuk merekam page view secara asinkron. Ditambah lagi, situs kita crawl-able secara sempurna oleh mesin pencari. Karena seperti yang disebutkan sebelumnya hanya situs HTML sederhana. Ini adalah panduan yang berisi, menjelaskan banyak hal seperti animasi CSS, jQuery Ajax, dan jQuery Promise. Berikut adalah referensi berguna untuk kamu lihat, untuk memperkuat yang telah kamu pelajari.
Terakhir, jangan lupa untuk mengunjungi situs demo dari panduan ini dan juga sumber kode-nya di repositori. |