Menerapkan Fitur Infinite Scroll Sederhana pada Blogger

Tabel Konten
  1. Konfigurasi 
Blogger Infinite Scroll

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 [&quot;index&quot;,&quot;archive&quot;]'>
<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 

DataKeterangan
typeOpsi 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.

68 Komentar

  • Kang Rian リアンさん

    matur nuhun.. :'D

  • Kia Meliala

    :)

  • BKE

    Keren lah :-bd
    Bisa buat memfungsikan widget lain nih

  • Iwan Efendi

    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 :

    Yang dtampilkan malah gambar berikut mas, dengan hasil yang terbilang kecil :

    Blog saya : IwanBerbagi

    Mohon bantuannya mas, terima kasih. :)

  • ApkDlMod.com

    gan kok saya coba terapkan tumbnails post nggk ikut reload ya ? yg ada malah blank tumbnail postingan ndk ikut ke refresh mohon pencerahannya suhu :'(

    • Taufik Nurrohman

      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

  • Ainun Jariah

    Mas di blog saya kok gak aktif ya...??

  • Unknown

    Kok gak work ya?

  • Fariz

    Kalau ditambah Masonry gimana ?

  • jurnalkata.com

    Kok ngg bisa mas... duhhhh berantakan malah

  • Cuman Android

    Terima kasih gan, mantap banget dah :"D

  • Sekedus

    Keren banget gan.. cocok nih buat (contohnya) blog Berita.

  • Igniel

    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 :)

  • Bungfrangki

    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

    • Taufik Nurrohman

      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

      • Sekedus

        klo saya menggunakan history.pushState(), untuk penjelasan bisa cek di sini (indonesia)

  • Unknown

    Suwun bro. Lanjutkan :D

  • Giri Diwa Adam

    Gan INFINITE SCROLL Di atas Mirip Dengan Punya Instagram Bukan ?? Makasih

  • Libra Yanada Sembiring

    http://kerensive.blogspot.com/search/label/Health?&max-results=7

    Kalau sudah batas akhir kenapa nggak mau nampil 'ALL POST SHOW'?

    • Taufik Nurrohman

      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.

  • DRCreative

    kok sewaktu meload satu post terakhir gk bisa ya gan?

  • DRCreative

    ehh udah bisa deh gan ternyata karena setting jumlah post :D

  • Igniel

    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.

  • Denny

    Solusinya gan post baru diload yang nongol malah data.post.body bukan snippetnya

  • Unknown

    punya saya saat discroll gambar tidak ikut diload jadi blank, masalahnya dimana yah mas?

  • Unknown

    solved mas, ternyata kesalah ambil thumbnail dari js heeh

  • Ayas Yaza

    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?

    • Taufik Nurrohman

      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.

      • Ayas Yaza

        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?

        • Taufik Nurrohman

          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.

          • Ayas Yaza

            sudah dirubah seperti intruksi mas taufik, tapi tetep ga bias mas.

            • Taufik Nurrohman

              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);
              • Ayas Yaza

                oke mas taufik, terimakasih atas bantuannya

  • Rauhun Isnaini

    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.

    • Taufik Nurrohman

      Mungkin akan lebih baik jika ditanyakan ke si pembuat tema secara langsung.

  • Pulung

    sama kaya yang di atas gan, saya pake disqus yang tampil on.clcik, saya ambil dari sini 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>
    • Taufik Nurrohman

      Sama seperti kasus ini, cukup masukan fungsi ke dalam kait load:

      infinite_scroll.on('load', function() {
      $('.showDisqus').click(function() { … });
      });
  • Putri Rahayu

    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();
    });

    begini dia

    • Taufik Nurrohman

      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'
      });
      • Putri Rahayu

        wah ternyata ada opsi kayak gitu di flickity, saya gak liat, hehehe... makasih banyak ya mas taufik, mantep lah memang mamas ini

  • Loker Sumatera

    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?

    • Taufik Nurrohman

      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.

      • Loker Sumatera

        yahh, sangat disayangkan, untuk saat ini saya hanya bisa mengakalinya dengan menekan button untuk memuat halamannya

  • Lein

    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.

  • Ayas Yaza

    Mas Taufik, type infinite-scroll bisa dibuat conditional ga?
    misalnya

    
    if(a) {
    // InfiniteScroll type 0
    }else{
    // InfiniteScroll type 1
    }
    

    makasih sebelumnya

  • Yuli Akbar

    kang, lazy load with interception observer gak bekerja saat button load more ditekan. gimana cara mengatasinya kang?

    • Taufik Nurrohman

      var observer = new IntersectionObserver( … ),
      container = document.querySelector( … );
      infinite_scroll.on('load', function() {
      observer.observe(container);
      });
      • Loker Sumatera

        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) {...

        • Taufik Nurrohman

          Ganti document.addEventListener("DOMContentLoaded", jadi infinite_scroll.on("load",

          • Loker Sumatera

            work kang, cuma ada problem lagi kang. sebelum tombol load ditekan, lazyImage gak jalan di awal BelajarDesign

            • Taufik Nurrohman

              Begini:

              // Picu di muat berikutnya
              infinite_scroll.on('load', function lazyLoad() { … });
              // Picu di awal muat
              lazyLoad();
  • Loker Sumatera

    terima kasih kang, udah work. saya buat jadi seperti ini:
    infinite_scroll.on('load', lazyLoad=function() {...});
    lazyLoad();

    terima kasih banyak kang, telah meluangkan waktunya;

  • Umar Qadafi

    Salam. Jika ingin memanggil hook di bawah ini, kodenya ditaruh mana ya, Gan? Terima kasih.

    infinite_scroll.on('load', function() { ... });
  • Loker Sumatera

    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

  • Ryan Jauhari

    Wah terimakasih bang, sangat bermanfaat, work it banget. Salut saya skripnta tidak di enkripsi seperti punya si hijau 🙂

Komentar telah ditutup.