Menerapkan Fitur Infinite Scroll Sederhana pada Blogger
Fitur ini merupakan contoh nyata penerapan dari potongan kode ini yang kemudian diaplikasikan untuk membuat navigasi halaman AJAX tanpa jQuery seperti pada contoh sebelumnya.
Infinite scroll adalah teknik desain web yang mencegah bar gulir peramban menggulir ke bagian bawah halaman, membuat halaman tumbuh dengan konten tambahan sebagai gantinya.
Plugin ini mengharuskan Anda untuk menentukan empat elemen sebagai target JavaScript. Posting, wadah posting, wadah navigasi halaman dan tautan navigasi halaman berikutnya. Untuk Blogger, elemen target yang paling umum dapat digunakan adalah sebagai berikut:
.blog-posts
.date-outer
.blog-pager
.blog-pager-older-link
Anda dapat menyesuaikannya nanti berdasarkan markup HTML pada templat Anda.
Plugin ini pada awalnya merupakan plugin untuk CMS Mecha, tapi sebenarnya ini tetap dapat bekerja pada platform yang lain seperti Blogger, dengan sedikit penyesuaian tentunya.
Untuk menerapkannya pada Blogger, salin kode di bawah ini kemudian letakkan di atas </body>
:
<b:if cond='data:blog.pageType in ["index","archive"]'>
<script src='//cdn.rawgit.com/tovic/infinite-scroll-plugin-for-mecha-cms/v1.1.0/infinite-scroll/assets/sword/infinite-scroll.min.js'></script>
<script>
//<![CDATA[
/*! Simple AJAX infinite scroll by Taufik Nurrohman */
var infinite_scroll = new InfiniteScroll({
type: 2,
target: {
posts: '.blog-posts',
post: '.date-outer',
anchors: '.blog-pager',
anchor: '.blog-pager-older-link'
},
text: {
load: '<a class="js-load" href="javascript:;">Muat Lagi</a>',
loading: '<span class="js-loading" style="cursor:wait;">Memuat\u2026</span>',
loaded: '<span class="js-loaded">Dimuat.</span>',
error: '<a class="js-error" href="javascript:;">Kesalahan.</a>'
}
});
//]]>
</script>
</b:if>
Simpan perubahan.
Konfigurasi
Data | Keterangan |
---|---|
type | Opsi 0 berarti pengguna perlu mengeklik tombol Muat Lagi untuk memuat posting-posting sebelumnya. Opsi 1 berarti pengguna hanya perlu menggulung peramban sampai pada batas akhir halaman untuk memuat posting-posting sebelumnya. Opsi 2 berarti pengguna perlu mengeklik tombol Muat Lagi untuk memuat posting-posting sebelumnya, setelah itu pengguna hanya perlu menggulung peramban sampai pada batas akhir halaman untuk memuat posting-posting sebelumnya. |
Labels: Blogger, Desain, JavaScript
68 Comments:
matur nuhun.. :'D
:)
Keren lah :-bd
Bisa buat memfungsikan widget lain nih
Bagus mas, sudah saya terapkan untuk tampilan mobile mas.
Mas tovic, bisa bantu gak untuk tampilan mobile saya di blog, itu imagenya pecah gitu mas.
Dia misalnya menggunakan gambar berikut :
[img]https://1.bp.blogspot.com/-WUKc-_ROIIE/V0UPNZqGdHI/AAAAAAAAE1U/6CiQap8ce2ouX89DgJkvgmA8FdYrXmCAQCLcB/s1600/CMD%2BTelnet%2B192.168.1.1.gif[/img]
Yang dtampilkan malah gambar berikut mas, dengan hasil yang terbilang kecil :
[img]https://1.bp.blogspot.com/-WUKc-_ROIIE/V0UPNZqGdHI/AAAAAAAAE1U/6CiQap8ce2ouX89DgJkvgmA8FdYrXmCAQCLcB/s280/CMD%2BTelnet%2B192.168.1.1.gif[/img]
Blog saya : [url=http://iwanberbagi.com]IwanBerbagi[/url]
Mohon bantuannya mas, terima kasih. :)
Itu sudah sengaja dilakukan oleh Blogger untuk optimasi halaman yang diakses menggunakan perangkat seluler.
Gak bisa kita lakukan perubahan untuk membuatnya tidak terlalu di compress gitu mas..?
Tampilan seluler dinonaktifkan saja mas, lalu buat versi tampilan seluler sendiri dengan memanfaatkan kondisional data:blog.isMobileRequest → /2013/01/bekerja-dengan-blog-seluler.html
matur nuhun :D
gan kok saya coba terapkan tumbnails post nggk ikut reload ya ? yg ada malah blank tumbnail postingan ndk ikut ke refresh mohon pencerahannya suhu :'(
Mas di blog saya kok gak aktif ya...??
Kalau thumbnail termuat dengan JavaScript efeknya bakal begitu. Harus diproses ulang perintah JavaScript untuk memuat thumbnail setiap kali posting baru dimuat. Bisa pakai hook seperti ini:
infinite_scroll.on('load', function() {
functionToResizeTheThumbnail('.posts img');
});
Referensi: README.md
Alternatif: /2016/06/mengubah-ukuran-thumbnail-tanpa.html
Kok gak work ya?
Kalau ditambah Masonry gimana ?
Kok ngg bisa mas... duhhhh berantakan malah
Terima kasih gan, mantap banget dah :"D
Keren banget gan.. cocok nih buat (contohnya) blog Berita.
Berarti ini bisa difungsikan buat plugin isotope juga kang?
Iya bisa.
Wah saya baru tau ada Blogspot sekeren ini. Duh telat banget yak.
Templatenya kereeenn bangettttt. Ringan pula.
Maaf komennya nggak relevan. Nggak tahan pengen bilang keren soalnya :)
=D
Keren bang :-bd
tapi setelah diterapkan, ada sedikit yang kurang,
URL di browser gak berubah setelah artikel berpindah ke artikel dibawahnya (saat kena scroll).
mudah-mudahan kedepan ada solusinya
Suwun bro. Lanjutkan :D
Gan INFINITE SCROLL Di atas Mirip Dengan Punya Instagram Bukan ?? Makasih
http://kerensive.blogspot.com/search/label/Health?&max-results=7
Kalau sudah batas akhir kenapa nggak mau nampil 'ALL POST SHOW'?
Jumlah posting per halaman diset ke 7, tapi jumlah semua posting hanya ada 5. Mungkin bisa diperbaiki kapan-kapan supaya tombol memuat tidak ditampilkan jika jumlah semua posting kurang dari batas maksimal.
kok sewaktu meload satu post terakhir gk bisa ya gan?
ehh udah bisa deh gan ternyata karena setting jumlah post :D
Saya pilih opsi 0: pengguna perlu mengeklik tombol Muat Lagi untuk memuat posting-posting sebelumnya. Tapi postingan otomatis keluar dengan sendirinya ketika di-scroll sampai akhir batas halaman.
Postingan home saya set 6 buah, ketika di-scroll langsung muncul 12 buah. Tapi setelah itu kembali normal. Tombol "Muat Lagi" tetap muncul, dan setiap di-klik postingan muncul 6 buah. Jadi yang error hanya proses pertama saja.
Solusinya gan post baru diload yang nongol malah data.post.body bukan snippetnya
Buat posting read-more tanpa JavaScript → /2012/04/posting-auto-read-more-tanpa-javascript.html
permasalahan kita sama mba
Sebenarnya Saya ada rencana untuk menambahkan API Riwayat supaya URL di address bar bisa berubah, tapi masih dalam tahap belajar sedikit-sedikit. Padahal ini fitur sudah lama sekali populer setelah munculnya event hashchange, Saya-nya saja yang malas :p
klo saya menggunakan history.pushState(), untuk penjelasan bisa cek [url=https://bertzzie.com/knowledge/javascript-lanjut/Javascript-History-API.html#fungsi-history-pushstate]di sini[/url] (indonesia)
punya saya saat discroll gambar tidak ikut diload jadi blank, masalahnya dimana yah mas?
solved mas, ternyata kesalah ambil thumbnail dari js heeh
izin pakai plugin ini mas, terimakasih
saya menggunakan sistem komentar facebook, perlu menambahkan kode ini untuk memanggil fb.comment pada posting yang baru muncul setelah proses load.
infinite_scroll.on('load', function() {
FB.XFBML.parse();
});
masalahnya FB.XFBML.parse bahkan mengurai kembali fb.comment dari awal halaman, dari posting paling atas sampai paling bawah halaman berulangkali setiap proses load. apa mas taufik punya solusi supaya setelah proses load halaman selanjutnya FB.XFBML.parse hanya mengeksekusi fb.comment pada posting yang baru muncul saja dan tidak mengurai kembali fb.comment lain yang sudah ada di setiap posting di halaman yang sudah termuat?
Kalau dari halaman referensi menjelaskan bahwa parameter pertama bisa dipakai untuk memparse elemen yang spesifik:
document.querySelectorAll('.fb-comment-parse-once').forEach(function($) {
FB.XFBML.parse($);
$.classList.remove('fb-comment-parse-once');
});
Nanti di elemen HTML terkait perlu ditambahkan kelas fb-comment-parse-once.
terimaksih mas taufik, apa penerapannya begini?
document.querySelectorAll('.fb-comment-parse-once').forEach(function($) {
FB.XFBML.parse($);
$.classList.remove('fb-comment-parse-once');
});
});
HTML
<div class='fbe fb-comments' data-numposts='5' data-width='100%' expr:data-href='data:post.canonicalUrl' expr:data-xid='data:post.id' expr:title='data:post.title' id='fc'/>
SDK
//fb
function loadAPI() {
var js = document.createElement('script');
js.async=true;
js.src = '//connect.facebook.net/id_ID/sdk.js#xfbml=1&version=v3.0&appId=&autoLogAppEvents=1';
document.body.appendChild(js);
}
window.onscroll = function () {
var rect = document.getElementById("fc").getBoundingClientRect();
if (rect.top < window.innerHeight) {
loadAPI();
window.onscroll = null;
}
}
saya terapkan seperti di atas, justru FB.XFBML.parse tidak mengeksekusi fb.comment di halaman selanjutnya. apa yang salah ya?
Enggak. Maksud Saya di markup komentar cukup ditambahkan kelas baru seperti ini:
<div class='fbe fb-comments fb-comment-parse-once' …/>
Lalu pada kait diterapkan seperti ini:
infinite_scroll.on('load', function() {
document.querySelectorAll('.fb-comment-parse-once').forEach(function($) {
FB.XFBML.parse($);
$.classList.remove('fb-comment-parse-once');
});
});
Untuk kode SDK tidak perlu dilakukan perubahan apa-apa.
sudah dirubah seperti intruksi mas taufik, tapi tetep ga bias mas.
Untuk fitur pemuatan API berdasarkan event menggulung mungkin lebih baik diganti pakai kait (?:add|remove)EventListener saja supaya tidak merusak sistem penggulung di plugin Saya ini pada bagian window.onscroll = null:
function loadAPI() {
var js = document.createElement('script');
js.async=true;
js.src = '//connect.facebook.net/id_ID/sdk.js#xfbml=1&version=v3.0&appId=&autoLogAppEvents=1';
document.body.appendChild(js);
}
function loadAPI_Hook() {
var rect = document.getElementById('fc').getBoundingClientRect();
if (rect.top < window.innerHeight) {
loadAPI();
window.removeEventListener("scroll", loadAPI_Hook);
}
}
window.addEventListener("scroll", loadAPI_Hook, false);
oke mas taufik, terimakasih atas bantuannya
Mohon maaf pak, saya lagi bingung karena habis belajar edit template evo magz pro setelah selesai perubahan, tiba-tiba komentarnya jadi muncul angka di samping photo avatar dan ada tulisan load more...dibawah kotak komentar. sudah nyari tapi gak nemu-nemu juga. kalau berkenan mohon bantuannya.
terimakasih dan mohon maaf kalau komentar saya tidak sesuai dengan topik pembahasan.
Mungkin akan lebih baik jika ditanyakan ke si pembuat tema secara langsung.
sama kaya yang di atas gan, saya pake disqus yang tampil on.clcik, saya ambil [url=https://stackoverflow.com/questions/4963505/several-disqus-threads-on-one-page/11432286#28832944]dari sini[/url] setelah memuat halaman selanjutnya, disqusnya ga tampil setelah di klik. tapi untuk halaman yang muncul pertama bias muncul. solusunya gimana ya? makasih sebelumnya gan
<a class='showDisqus' href="javascript:void(0);" expr:data-id='data:post.id' expr:data-title='data:post.title' expr:data-url='data:post.canonicalUrl'>Komentar</a>
Sama seperti kasus ini, cukup masukan fungsi ke dalam kait load:
infinite_scroll.on('load', function() {
$('.showDisqus').click(function() { … });
});
sayakan pake caraousel, setiap kali dimuat, ada tambahan elemen <span class="fi" id="fi:0"/>.
jadinya dia ikut ke caraousel...
cara ngilangin span itu gimana ya mas... atau memasukkannya kedalam blog-pager
saya udah tambahin gini tapi ga bisa juga
infinite_scroll.on("load", function() {
$(".fi").remove();
});
[url=https://sa4x.blogspot.com/]begini dia[/url]
Abreviasi fi bagi Mecha sebenarnya memiliki arti fragment identifier. Itu Saya tambahkan agar ketika Saya mengaktifkan URL hash dengan window.location.hash sebagai #fi:0, #fi:1, #fi:2, dan seterusnya, maka halaman akan secara otomatis meloncat ke titik muat tersebut.
Di carousel punyamu kan pakai Flickity… nah, di plugin Flickity itu ada opsi untuk menentukan selektor item. Mungkin kamu bisa coba pakai itu. Misalnya seperti ini:
var carousel = new Flickity(node, {
cellSelector: '.post'
});
wah ternyata ada opsi kayak gitu di flickity, saya gak liat, hehehe... makasih banyak ya mas taufik, mantep lah memang mamas ini
kang, gimana cara mengakali load yang di slide ke samping? post hanya memuat saat di scroll ke bawah, gimana supaya bisa memuat saat slide ke samping?
Bisa tapi terlalu rumit untuk plugin ini. Saya ingin fokus ke hal-hal yang ringan saja, seperti kata “sederhana” pada judul artikel ini. Website yang bisa di-slide ke samping sudah bukan masuk ke dalam kategori sederhana lagi.
gimana cara buat script ini biar di load saat pengunjung men-scrool laman, kaya lazyload adsense gitu atau di muat setelah loading blog selesai. soal nya kalo pengunjung langsung scrool kebawah, langsung nge load 2 halaman.
Agar pas postingan home saya set 8 buah, ketika di-scroll langsung muncul 16 buah. Tapi setelah itu kembali normal. Tombol "Muat Lagi" tetap muncul, dan setiap di-klik postingan muncul 8 buah. Jadi yang error hanya proses pertama saja.
Kalau skrip Saya dilepas dan kamu coba salin URL dari tautan “Halaman Berikutnya” di situ ada parameter max-results=8 apa tidak? Kalau tidak ada mungkin bisa diatasi dengan cara menambahkan parameter tersebut.
Terkait: /2012/03/membatasi-jumlah-posting-pada-halaman.html
yahh, sangat disayangkan, untuk saat ini saya hanya bisa mengakalinya dengan menekan button untuk memuat halamannya
Mas Taufik, type infinite-scroll bisa dibuat conditional ga?
misalnya
if(a) {
// InfiniteScroll type 0
}else{
// InfiniteScroll type 1
}
makasih sebelumnya
→ /2018/09/javascript-tag-kondisional-halaman-blogger.html
kang, lazy load with interception observer gak bekerja saat button load more ditekan. gimana cara mengatasinya kang?
var observer = new IntersectionObserver( … ),
container = document.querySelector( … );
infinite_scroll.on('load', function() {
observer.observe(container);
});
kang, tolong bantu kalau kodenya seperti ini gimana kang?
document.addEventListener("DOMContentLoaded", function() {
var lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));;
if ("IntersectionObserver" in window && "IntersectionObserverEntry" in window && "intersectionRatio" in window.IntersectionObserverEntry.prototype) {
let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
let lazyImage = entry.target;
lazyImage.src = lazyImage.dataset.src;
lazyImage.srcset = lazyImage.dataset.srcset;
lazyImage.classList.remove("lazy");
lazyImageObserver.unobserve(lazyImage);
}
});
});
lazyImages.forEach(function(lazyImage) {
lazyImageObserver.observe(lazyImage);
});
}
});
apakah on.('load',) nya sebagai pembungkus di lazyImages.forEach(function(lazyImage) {...
Ganti document.addEventListener("DOMContentLoaded", jadi infinite_scroll.on("load",
work kang, cuma ada problem lagi kang. sebelum tombol load ditekan, lazyImage gak jalan di awal [url=https://belajardesignbentar.blogspot.com/]BelajarDesign[/url]
Begini:
// Picu di muat berikutnya
infinite_scroll.on('load', function lazyLoad() { … });
// Picu di awal muat
lazyLoad();
error kang
terima kasih kang, udah work. saya buat jadi seperti ini:
infinite_scroll.on('load', lazyLoad=function() {...});
lazyLoad();
terima kasih banyak kang, telah meluangkan waktunya;
Salam. Jika ingin memanggil hook di bawah ini, kodenya ditaruh mana ya, Gan? Terima kasih.
infinite_scroll.on('load', function() { ... });
kang, ijin tanya. saya punya sebuah function infinite scroll seperti ini.
//Function Infinite Scroll
function LoadMore(){$("#blog-pager").click((function(event){event.preventDefault(),$("#blog-pager a").html("Loading...");var link=$("#Blog1_blog-pager-older-link").attr("href");$.get(link,(function(data){var source=$(data).find(".blog-posts").length?$(data):$("<div></div>");$(".blog-posts").append(source.find(".blog-posts").html()),$("#blog-pager").html(source.find("#Blog1_blog-pager-older-link").clone()),initialLink()}),"html")}))}LoadMore();
saya gabungin dengan observer image. saat di load, observer image dari hasil memuat infinite scroll dengan kode tersebut tidak bekerja. saya ingat kode yg saya dapat dari penjelasan infinite scroll kang taufiq.
//Kode ini
// Picu di muat berikutnya
infinite_scroll.on('load', function lazyLoad() { … });
// Picu di awal muat
lazyLoad();
cara membuat variable infinite_scroll dari sebuah function diatas gimana ya kang?
saat saya ubah function tersebut menjadi seperti variable infinite_scroll, error hasil yang saya dapat. mohon bantuannya kang. plisss
Wah terimakasih bang, sangat bermanfaat, work it banget. Salut saya skripnta tidak di enkripsi seperti punya si hijau 🙂
ign*** kah ? wkwkwkwk
Post a Comment
<< Home