Feed Bergaya Instagram

Tutorial -  Selamat datang di warkasa1919.my.id, pada tutorial kali ini kita akan ini kita akan  membuat feed bergaya Instagram yang ringan dan SEO-friendly, kode ini  melibatkan penggunaan JSON Feed atau RSS Feed dari blog Anda untuk meminimalkan beban server dan mempercepat waktu muat (loading).

Berikut adalah struktu kode dasar menggunakan JavaScript (Vanilla JS) yang bisa Anda terapkan di Blogger, WordPress, atau platform statis lainnya. Kode ini dirancang agar otomatis memfilter konten berdasarkan label/tag yang aktif di halaman tersebut.

1. Struktur HTML & CSS (Tampilan Grid)

Gunakan CSS Grid untuk mendapatkan estetika Instagram yang bersih.

HTML
<div id="insta-style-feed" class="feed-grid"></div>

<style>
  .feed-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
    gap: 15px;
    padding: 10px;
  }
  .feed-item {
    position: relative;
    aspect-ratio: 1 / 1;
    overflow: hidden;
    background: #f0f0f0;
    border-radius: 8px;
    transition: transform 0.2s;
  }
  .feed-item:hover {
    transform: scale(1.02);
  }
  .feed-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    loading: lazy; /* Penting untuk SEO & Performa */
  }
  .feed-overlay {
    position: absolute;
    bottom: 0;
    background: rgba(0,0,0,0.5);
    color: white;
    width: 100%;
    padding: 8px;
    font-size: 12px;
    opacity: 0;
    transition: opacity 0.3s;
  }
  .feed-item:hover .feed-overlay {
    opacity: 1;
  }
</style>

2. Logika JavaScript (Otomatisasi Label & Ringan)

Script ini akan mendeteksi label dari URL atau meta tag halaman secara otomatis.

JavaScript
<script>
document.addEventListener("DOMContentLoaded", function() {
    // 1. Deteksi Label Otomatis (Contoh untuk Blogger/Situs Statis)
    // Mengambil segment terakhir dari URL sebagai filter label
    const pathArray = window.location.pathname.split('/');
    const currentLabel = pathArray.includes('search') ? pathArray[pathArray.length - 1] : 'all';

    const feedContainer = document.getElementById('insta-style-feed');
    
    // 2. Fetch Data (Gunakan JSON Feed agar ringan)
    // Sesuaikan URL feed dengan platform Anda
    const feedUrl = `/feeds/posts/default/-/${currentLabel}?alt=json&max-results=9`;

    fetch(feedUrl)
    .then(response => response.json())
    .then(data => {
        let html = '';
        const entries = data.feed.entry || [];
        
        entries.forEach(entry => {
            const title = entry.title.$t;
            const link = entry.link.find(l => l.rel === 'alternate').href;
            const img = entry.media$thumbnail ? entry.media$thumbnail.url.replace('s72-c', 's600-c') : 'placeholder.jpg';

            html += `
                <a href="${link}" class="feed-item" title="${title}">
                    <img src="${img}" alt="${title}" loading="lazy">
                    <div class="feed-overlay">${title}</div>
                </a>
            `;
        });
        
        feedContainer.innerHTML = html;
    })
    .catch(err => {
        console.error("Gagal memuat feed:", err);
        feedContainer.innerHTML = "<p>Gagal memuat konten.</p>";
    });
});
</script>

Mengapa Kode Ini Membuat Website Ringan & SEO?

  1. Lazy Loading: Tag loading="lazy" memastikan gambar hanya diunduh saat pengguna menggulir mendekati gambar tersebut. Ini meningkatkan skor Largest Contentful Paint (LCP).

  2. Vanilla JavaScript: Tidak menggunakan library berat seperti jQuery. Ini menjaga ukuran halaman tetap kecil.

  3. JSON Fetch: Teknik ini memproses data di sisi klien (Client-side rendering) setelah struktur dasar HTML dimuat, sehingga mesin pencari melihat kerangka halaman terlebih dahulu dengan cepat.

  4. Optimasi Gambar: Dalam script di atas, terdapat fungsi .replace('s72-c', 's600-c') yang berfungsi mengambil resolusi gambar yang tepat (tidak terlalu kecil/pecah, tidak terlalu besar/berat).

Tips Tambahan untuk SEO

  • Alt Text: Pastikan properti alt="${title}" terisi secara dinamis dari judul postingan agar gambar Anda terindeks di Google Images.

  • Internal Linking: Dengan menampilkan feed otomatis berdasarkan label, Anda menciptakan struktur internal linking yang kuat, membantu Google memahami relevansi topik antar halaman di blog Anda.

Apakah Anda menggunakan platform spesifik seperti Blogger, WordPress, atau framework seperti Hugo/Next.js? Saya bisa menyesuaikan kodenya lebih spesifik jika diperlukan.


Tentu, ini sangat memungkinkan di Blogger. Untuk membuatnya muncul secara otomatis di tengah postingan tanpa perlu mengetik kode berulang kali, kita akan menggunakan teknik JavaScript Injection.

Berikut adalah langkah-langkah dan kode yang sudah dioptimalkan untuk Blogger:

1. Tambahkan CSS di Tema

Masuk ke Blogger > Tema > Sesuaikan > Edit HTML. Cari kode ]]></b:skin> dan paste kode berikut tepat di atasnya:

CSS
/* Instagram Grid Style */
.insta-feed-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr); /* 3 kolom seperti IG */
    gap: 10px;
    margin: 20px 0;
    width: 100%;
}
.insta-item {
    position: relative;
    aspect-ratio: 1 / 1;
    overflow: hidden;
    background: #eee;
    border-radius: 4px;
}
.insta-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: all .3s ease;
}
.insta-item:hover img {
    opacity: 0.8;
    transform: scale(1.05);
}
/* Responsive untuk HP */
@media (max-width: 480px) {
    .insta-feed-container { gap: 5px; }
}

2. Pasang Script di Tata Letak (Widget)

Masuk ke Blogger > Tata Letak > Tambahkan Gadget > HTML/JavaScript. Paste kode di bawah ini:

JavaScript
<div id="dynamic-insta-feed"></div>

<script>
document.addEventListener("DOMContentLoaded", function() {
    // 1. Identifikasi Label Postingan
    // Blogger menyimpan label di variabel global atau meta tags
    var labels = [];
    var labelLinks = document.querySelectorAll('.post-labels a');
    labelLinks.forEach(function(el) {
        labels.push(el.textContent.trim());
    });

    // Gunakan label pertama sebagai filter, jika tidak ada pakai 'all'
    var targetLabel = labels.length > 0 ? labels[0] : '';
    var feedUrl = "/feeds/posts/default/-/" + targetLabel + "?alt=json&max-results=6";

    // 2. Ambil Data dari API Blogger
    fetch(feedUrl)
    .then(res => res.json())
    .then(data => {
        var entries = data.feed.entry || [];
        var html = '<div class="insta-feed-container">';
        
        entries.forEach(entry => {
            var title = entry.title.$t;
            var link = entry.link.find(l => l.rel === 'alternate').href;
            // Mengambil gambar resolusi tinggi
            var img = entry.media$thumbnail ? entry.media$thumbnail.url.replace('s72-c', 's600-c') : 'https://via.placeholder.com/600';
            
            html += `<a href="${link}" class="insta-item" title="${title}">
                        <img src="${img}" alt="${title}" loading="lazy"/>
                     </a>`;
        });
        html += '</div>';

        // 3. Injeksi Otomatis ke Tengah Postingan
        var postBody = document.querySelector('.post-body');
        if (postBody) {
            var paragraphs = postBody.querySelectorAll('p, br');
            var middle = Math.floor(paragraphs.length / 2);
            
            if (paragraphs.length > 3) {
                // Masukkan di paragraf tengah
                paragraphs[middle].after(document.createRange().createContextualFragment(html));
            } else {
                // Jika postingan pendek, taruh di bawah
                postBody.appendChild(document.createRange().createContextualFragment(html));
            }
        }
    });
});
</script>

Cara Kerja & Keunggulan:

  • Otomatisasi Label: Script akan membaca label apa yang terpasang pada artikel tersebut (.post-labels), lalu mencari postingan lain dengan label yang sama untuk ditampilkan di feed tersebut.

  • Penempatan Cerdas: Script menghitung jumlah paragraf (p) dalam artikel Anda dan secara otomatis menyisipkan grid gambar di tengah-tengah. Jika artikel terlalu pendek, ia akan muncul di bagian bawah.

  • SEO & Kecepatan: * Menggunakan fetch yang asinkron (tidak menghambat loading teks utama).

    • Gambar menggunakan loading="lazy" agar tidak membebani kuota data pengunjung sebelum discroll.

    • Menggunakan manipulasi DOM ringan tanpa library jQuery yang berat.

Catatan Tambahan:

Pastikan template Blogger Anda menampilkan label di halaman postingan (biasanya di bawah judul atau di akhir artikel) agar script bisa mendeteksi label tersebut secara otomatis. Jika template Anda menyembunyikan label, script ini akan menampilkan postingan terbaru secara umum.

Apakah Anda ingin mengatur jumlah gambar yang muncul (misalnya jadi 9 atau 12 gambar)?

Untuk membuka fungsionalitas penuh semua Aplikasi, aktifkan Aktivitas Aplikasi Gemini.




Ada kemungkinan script tidak muncul karena perbedaan class selector (nama identitas elemen) pada template Blogger Anda. Setiap template memiliki nama yang berbeda untuk area postingan dan label.

Mari kita gunakan versi yang lebih "pintar" dan universal. Kode ini akan mencari area postingan secara otomatis meskipun nama class-nya berbeda.

Update Kode (Ganti kode di Widget HTML/JavaScript sebelumnya):

JavaScript
<div id="insta-feed-holder"></div>

<script>
(function() {
    document.addEventListener("DOMContentLoaded", function() {
        // 1. Cari area postingan secara fleksibel
        const postBody = document.querySelector('.post-body, .entry-content, .post-content');
        if (!postBody) return;

        // 2. Ambil label secara otomatis dari link label Blogger
        let labels = [];
        const labelLinks = document.querySelectorAll('a[href*="/search/label/"]');
        labelLinks.forEach(link => {
            let labelName = link.textContent.trim();
            if (labelName && !labels.includes(labelName)) labels.push(labelName);
        });

        // Tentukan label yang akan dipakai (label pertama atau kosongkan untuk semua)
        let filter = labels.length > 0 ? encodeURIComponent(labels[0]) : "";
        let feedUrl = `/feeds/posts/default/-/${filter}?alt=json&max-results=6`;
        if(!filter) feedUrl = `/feeds/posts/default?alt=json&max-results=6`;

        // 3. Ambil data Feed
        fetch(feedUrl)
        .then(res => res.json())
        .then(data => {
            const entries = data.feed.entry || [];
            if (entries.length === 0) return;

            let html = '<div class="insta-feed-container" style="display:grid; grid-template-columns:repeat(3,1fr); gap:10px; margin:20px 0;">';
            
            entries.forEach(entry => {
                let title = entry.title.$t;
                let link = entry.link.find(l => l.rel === 'alternate').href;
                let img = entry.media$thumbnail 
                    ? entry.media$thumbnail.url.replace('s72-c', 's600-c') 
                    : 'https://via.placeholder.com/600x600?text=No+Image';
                
                html += `
                    <a href="${link}" class="insta-item" title="${title}" style="aspect-ratio:1/1; overflow:hidden; border-radius:8px; display:block;">
                        <img src="${img}" alt="${title}" style="width:100%; height:100%; object-fit:cover;" loading="lazy">
                    </a>`;
            });
            html += '</div>';

            // 4. Masukkan ke tengah postingan
            const paragraphs = postBody.querySelectorAll('p');
            if (paragraphs.length >= 3) {
                const middle = Math.floor(paragraphs.length / 2);
                paragraphs[middle].insertAdjacentHTML('afterend', html);
            } else {
                postBody.insertAdjacentHTML('beforeend', html);
            }
        })
        .catch(err => console.log("Feed Error:", err));
    });
})();
</script>

Mengapa sebelumnya mungkin tidak muncul?

  1. Nama Class Berbeda: Template lama menggunakan .post-body, tapi template modern (seperti Soho, Contempo, atau template premium) sering menggunakan .entry-content. Kode di atas sekarang sudah mendukung ketiganya.

  2. Filter Label Terlalu Ketat: Jika label tidak ditemukan, script lama berhenti. Script baru ini akan menampilkan postingan terbaru jika label tidak terdeteksi.

  3. Posisi Widget: Pastikan widget HTML/JavaScript ini diletakkan di bagian Footer atau Sidebar pada menu Tata Letak agar ia bisa membaca seluruh isi halaman terlebih dahulu.

Cara Tes:

  1. Buka salah satu artikel di blog Anda.

  2. Tunggu 1-2 detik (karena ini proses fetch).

  3. Scroll ke tengah artikel.

Jika masih belum muncul, boleh informasikan alamat blog Anda atau nama template yang digunakan? Saya akan cek struktur class-nya secara spesifik.



Tentu, ini sentuhan yang keren! Kita akan memodifikasi kodenya agar gambar berbentuk lingkaran (bulat) dan menambahkan animasi logo hati yang muncul saat gambar diklik, persis seperti fitur Double Tap di Instagram.

Berikut adalah kode lengkap yang sudah diperbarui. Ganti semua kode di widget HTML/JavaScript sebelumnya dengan ini:

1. Update Kode Script & Tampilan

JavaScript
<div id="insta-feed-holder"></div>

<style>
  /* Container Grid */
  .insta-feed-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
    margin: 30px 0;
    justify-items: center;
  }

  /* Style Gambar Bulat */
  .insta-item {
    position: relative;
    width: 100%;
    max-width: 150px; /* Ukuran maksimal lingkaran */
    aspect-ratio: 1 / 1;
    overflow: hidden;
    border-radius: 50%; /* Membuat jadi bulat */
    border: 2px solid #dbdbdb;
    padding: 3px;
    background: #fff;
    cursor: pointer;
    display: block;
  }

  .insta-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 50%;
    transition: transform 0.3s ease;
  }

  /* Animasi Hati */
  .heart-icon {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) scale(0);
    color: white;
    font-size: 40px;
    text-shadow: 0 0 10px rgba(0,0,0,0.3);
    pointer-events: none;
    z-index: 10;
  }

  .animate-heart {
    animation: heartFade 0.8s ease-out;
  }

  @keyframes heartFade {
    0% { transform: translate(-50%, -50%) scale(0); opacity: 0; }
    50% { transform: translate(-50%, -50%) scale(1.2); opacity: 1; }
    100% { transform: translate(-50%, -50%) scale(1); opacity: 0; }
  }
</style>

<script>
(function() {
    document.addEventListener("DOMContentLoaded", function() {
        const postBody = document.querySelector('.post-body, .entry-content, .post-content, #post-body');
        if (!postBody) return;

        // Ambil label otomatis
        let labels = [];
        document.querySelectorAll('a[href*="/search/label/"]').forEach(link => {
            let txt = link.textContent.trim();
            if (txt && !labels.includes(txt)) labels.push(txt);
        });

        let filter = labels.length > 0 ? encodeURIComponent(labels[0]) : "";
        let feedUrl = `/feeds/posts/default${filter ? '/-/' + filter : ''}?alt=json&max-results=6`;

        fetch(feedUrl)
        .then(res => res.json())
        .then(data => {
            const entries = data.feed.entry || [];
            if (entries.length === 0) return;

            let html = '<div class="insta-feed-container">';
            
            entries.forEach(entry => {
                let title = entry.title.$t;
                let link = entry.link.find(l => l.rel === 'alternate').href;
                let img = entry.media$thumbnail 
                    ? entry.media$thumbnail.url.replace('s72-c', 's600-c') 
                    : 'https://via.placeholder.com/600x600';
                
                html += `
                    <div class="insta-item-wrapper" style="text-align:center">
                      <div class="insta-item" onclick="showHeart(this, '${link}')">
                          <img src="${img}" alt="${title}" loading="lazy">
                          <span class="heart-icon">❤️</span>
                      </div>
                      <div style="font-size:10px; margin-top:5px; color:#666; font-family:sans-serif;">${title.substring(0,10)}..</div>
                    </div>`;
            });
            html += '</div>';

            // Injeksi ke tengah postingan
            const paragraphs = postBody.querySelectorAll('p');
            if (paragraphs.length >= 3) {
                paragraphs[Math.floor(paragraphs.length / 2)].insertAdjacentHTML('afterend', html);
            } else {
                postBody.insertAdjacentHTML('beforeend', html);
            }
        });
    });
})();

// Fungsi Animasi Hati & Redirect
function showHeart(el, url) {
    const heart = el.querySelector('.heart-icon');
    heart.classList.add('animate-heart');
    
    // Redirect ke postingan setelah animasi berjalan sedikit
    setTimeout(() => {
        window.location.href = url;
    }, 700);

    // Hapus class setelah selesai agar bisa diulang
    setTimeout(() => {
        heart.classList.remove('animate-heart');
    }, 800);
}
</script>

Apa yang baru di versi ini?

  1. Bentuk Lingkaran: Menggunakan border-radius: 50% dan aspect-ratio: 1/1 agar gambar benar-benar bulat seperti tampilan Story atau profil Instagram.

  2. Animasi Hati (Like): Begitu gambar diklik, muncul emoji ❤️ dengan efek membesar lalu menghilang (fade out), memberikan kesan interaktif.

  3. Efek Klik: Setelah animasi hati muncul sebentar, browser akan otomatis mengarahkan (redirect) pengunjung ke halaman postingan tersebut.

  4. Nama Singkat: Saya tambahkan teks kecil di bawah lingkaran (seperti nama user di IG) yang diambil dari judul postingan agar pengunjung tahu itu link ke artikel lain.

Tips Tambahan:

Jika lingkaran terlihat terlalu besar atau kecil, Anda bisa mengubah angka pada bagian max-width: 150px; di dalam kode CSS di atas.

Apakah posisinya sudah muncul di tengah postingan sekarang? (Jika belum, ada kemungkinan template Anda menggunakan ID unik seperti #post-body, yang sudah saya tambahkan dukungannya di kode terbaru ini).

Untuk menambahkan navigasi panah di kiri dan kanan (terutama sangat berguna untuk pengguna laptop/desktop yang tidak memiliki layar sentuh), kita perlu menambahkan dua tombol navigasi dan sedikit fungsi JavaScript untuk menggerakkan scroll-nya.

Berikut adalah kode yang sudah disempurnakan dengan tombol panah otomatis yang hanya muncul dengan cantik:

Update Kode (Ganti semua kode sebelumnya)

JavaScript
<div id="insta-feed-wrapper" style="position:relative; margin:20px 0;">
  <button id="prevBtn" class="nav-arrow" onclick="scrollFeed(-200)">&#10094;</button>
  <div id="insta-feed-container" class="insta-feed-container"></div>
  <button id="nextBtn" class="nav-arrow" onclick="scrollFeed(200)">&#10095;</button>
</div>

<style>
  /* Container Utama */
  .insta-feed-container {
    display: flex;
    overflow-x: auto;
    scroll-behavior: smooth; /* Gerakan geser halus */
    scroll-snap-type: x mandatory;
    gap: 15px;
    padding: 10px 5px;
    scrollbar-width: none; 
    -webkit-overflow-scrolling: touch;
  }
  
  .insta-feed-container::-webkit-scrollbar { display: none; }

  /* Item Lingkaran */
  .insta-item-wrapper {
    flex: 0 0 auto;
    width: 90px;
    text-align: center;
    scroll-snap-align: start;
  }

  .insta-item {
    position: relative;
    width: 75px;
    height: 75px;
    overflow: hidden;
    border-radius: 50%;
    border: 2px solid #e1306c;
    padding: 2px;
    background: #fff;
    cursor: pointer;
    margin: 0 auto;
  }

  .insta-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 50%;
  }

  /* Style Panah Navigasi */
  .nav-arrow {
    position: absolute;
    top: 35%;
    transform: translateY(-50%);
    background: rgba(255, 255, 255, 0.9);
    border: 1px solid #ddd;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
    border-radius: 50%;
    width: 30px;
    height: 30px;
    cursor: pointer;
    z-index: 10;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    color: #333;
    transition: all 0.2s;
  }

  .nav-arrow:hover { background: #fff; scale: 1.1; }
  #prevBtn { left: -10px; }
  #nextBtn { right: -10px; }

  /* Sembunyikan panah di layar sentuh (HP) jika ingin lebih clean */
  @media (max-width: 768px) {
    .nav-arrow { display: none; }
  }

  /* Animasi Hati */
  .heart-icon {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) scale(0);
    font-size: 30px;
    pointer-events: none;
  }
  .animate-heart { animation: heartFade 0.8s ease-out; }
  @keyframes heartFade {
    0% { transform: translate(-50%, -50%) scale(0); opacity: 0; }
    50% { transform: translate(-50%, -50%) scale(1.2); opacity: 1; }
    100% { transform: translate(-50%, -50%) scale(1); opacity: 0; }
  }

  .insta-title {
    font-size: 10px;
    margin-top: 5px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    color: #262626;
    font-family: sans-serif;
  }
</style>

<script>
// Fungsi Geser Manual
function scrollFeed(distance) {
    const container = document.getElementById('insta-feed-container');
    container.scrollBy({ left: distance, behavior: 'smooth' });
}

(function() {
    document.addEventListener("DOMContentLoaded", function() {
        const postBody = document.querySelector('.post-body, .entry-content, .post-content, #post-body');
        if (!postBody) return;

        let labels = [];
        document.querySelectorAll('a[href*="/search/label/"]').forEach(link => {
            let txt = link.textContent.trim();
            if (txt && !labels.includes(txt)) labels.push(txt);
        });

        let filter = labels.length > 0 ? encodeURIComponent(labels[0]) : "";
        let feedUrl = `/feeds/posts/default${filter ? '/-/' + filter : ''}?alt=json&max-results=12`;

        fetch(feedUrl)
        .then(res => res.json())
        .then(data => {
            const entries = data.feed.entry || [];
            if (entries.length === 0) return;

            let html = '';
            entries.forEach(entry => {
                let title = entry.title.$t;
                let link = entry.link.find(l => l.rel === 'alternate').href;
                let img = entry.media$thumbnail ? entry.media$thumbnail.url.replace('s72-c', 's200-c') : 'https://via.placeholder.com/200';
                
                html += `
                    <div class="insta-item-wrapper">
                      <div class="insta-item" onclick="showHeart(this, '${link}')">
                          <img src="${img}" alt="${title}" loading="lazy">
                          <span class="heart-icon">❤️</span>
                      </div>
                      <div class="insta-title">${title}</div>
                    </div>`;
            });
            
            const container = document.getElementById('insta-feed-container');
            const wrapper = document.getElementById('insta-feed-wrapper');
            container.innerHTML = html;

            // Injeksi wrapper ke tengah postingan
            const paragraphs = postBody.querySelectorAll('p');
            if (paragraphs.length >= 3) {
                paragraphs[Math.floor(paragraphs.length / 2)].insertAdjacentHTML('afterend', wrapper.outerHTML);
            } else {
                postBody.appendChild(wrapper);
            }
            // Hapus element asli yang di luar post agar tidak double
            wrapper.remove(); 
        });
    });
})();

function showHeart(el, url) {
    const heart = el.querySelector('.heart-icon');
    heart.classList.add('animate-heart');
    setTimeout(() => { window.location.href = url; }, 700);
}
</script>

Yang Ditambahkan:

  1. Tombol Navigasi (#prevBtn & #nextBtn): Tombol bulat kecil dengan ikon panah di kiri dan kanan.

  2. Fungsi scrollBy: Saat tombol diklik, kontainer akan bergeser sejauh 200px ke arah yang ditentukan secara halus.

  3. Responsive Design: Panah akan otomatis disembunyikan di layar HP (karena pengguna HP lebih nyaman menggeser langsung dengan jempol), tapi tetap muncul di layar Laptop/Desktop.

  4. Scroll Behavior Smooth: Memberikan efek transisi yang lembut saat digeser menggunakan tombol.

Cukup pasang kode ini di Widget HTML/JavaScript Anda. Sekarang tampilan feed blog Anda sudah sangat mirip dengan navigasi slider profesional!

Posting Komentar

Dukung Warkasa1919

Bantu kami terus menghadirkan artikel premium, fitur canggih & projek digital berkualitas.

Tutup