Table of Contents

Sonsuz bir kaydırma, kullanıcı katılımını sürekli olarak yeni içerikle geliştirmek için web sitelerinde kullanılan popüler bir tekniktir.Bu makalede, ziyaretçileri daha uzun süre meşgul eder ve JavaScript ile tam olarak takip eden ve çeşitli web sitesine uygun olarak özelleştirilmiş hale getirmek, sosyal medya listelerine uygun olarak, bu makalede, neden, sonsuz kaydırmanın en iyi uygulamalarını inceleyeceğiz.

Sonsuza Kadar Kullanımı Neden?

Sonsuz kaydırma, kullanıcı katılımını ve site performansını doğrudan etkileyen birkaç fayda sunar:

  • [[Dönetici:0)Perginasyona ihtiyaç duyar:) Sayfayı yeniden yükler ve manuel tıklamaları ortadan kaldırarak, tarama düzgün ve daha sezgisel hale gelir. Kullanıcılar kesinti olmadan içeriği keşfedebilirler.
  • [FONT:0)Encourages content keşfi:) Yeni eşya yükleri otomatik olarak, ziyaretçiler ek makaleler, ürünler veya mesajları başka türlü kaçırabilecek daha muhtemel.
  • [FONT:0] Kullanıcı etkileşimi ölçümler geliştirmek: Sayfada Zaman, oturumda sayfalar ve kaydırma derinliği genellikle artış çünkü taramanın doğal akışı korunmuştur.
  • [FONT:0] Modern, dinamik bir kullanıcı deneyimi sunuyor: Twitter, Pinterest ve Instagram, web üzerinde bir uygulama benzeri hissetmek için sonsuz bir kaydırma kullanıyor.

Ancak, sonsuz kaydırma her bağlamda uygun değildir. Kullanıcıların belirli öğeleri hızlı bir şekilde bulmaları gerektiği Siteler (örneğin, dizi listeler veya arama sonuçları) bir ayak veya "Load More" düğmesine tıklayarak klasik paginasyondan yararlanabilir.

Sayfanın Temel Uygulaması Sonsuza Kadar

Temel sonsuz bir kaydırmayı uygulamak, kullanıcının sayfanın altına yaklaştığında yeni içeriği dinlemek ve uygulamak için içerir. Aşağıda basit bir versiyon oluşturmak için bir adım adım kılavuzu.

HTML Structure HTML Structure

İlk içeriği tutan bir konteyner elemanı oluşturun. Tüm yeni eşyalar burada gerçekleştirilir.

<div id="content">
 <!-- Existing items loaded on page load -->
 <div class="item">Item 1</div>
 <div class="item">Item 2</div>
 <div class="item">Item 3</div>
</div>
<div id="loading-indicator" style="display:none;">Loading more content...</div>

JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek JavaScript Örnek

Sayfanın alt kısmında kullanıcı değiştiğinde, sapma olayı kullanarak algılıyoruz. ()) çok geç ateşten tetikçiyi önler.

const contentDiv = document.getElementById('content');
const loadingIndicator = document.getElementById('loading-indicator');
let isLoading = false; // Prevent duplicate requests

window.addEventListener('scroll', () => {
 const scrollPosition = window.innerHeight + window.scrollY;
 const documentHeight = document.body.offsetHeight;

 if (scrollPosition >= documentHeight - 200 && !isLoading) {
 loadMoreContent();
 }
});

async function loadMoreContent() {
 isLoading = true;
 loadingIndicator.style.display = 'block';

 try {
 // Simulate fetching new content from server
 const newItem = document.createElement('div');
 newItem.className = 'item';
 newItem.textContent = `New item loaded at ${new Date().toLocaleTimeString()}`;
 contentDiv.appendChild(newItem);
 } finally {
 isLoading = false;
 loadingIndicator.style.display = 'none';
 }
}

Uygulamayı Teşvik Etmek

Bir üretim süresi sonsuz bir şekilde, performans ve kullanıcı deneyimi geliştirilmelidir.

Sayfayı İyileştirmek

Çiğ kaydırma olayı hızla yangınlar, bu da performansları azaltılabilir. bir debounce işlevi kullanarak, çek sadece kısa bir duraklamadan sonra çalışır.

function debounce(func, wait) {
 let timeout;
 return function executedFunction(...args) {
 clearTimeout(timeout);
 timeout = setTimeout(() => func.apply(this, args), wait);
 };
}

window.addEventListener('scroll', debounce(checkScrollPosition, 100));

Intersection Observer API'si kullanarak

Daha verimli ve modern bir yaklaşım, [[Dönetici Gözlemleyicisi[Dönetici:0)) tarafından belirlenen bir çağrının altında bulunan bir çağrıyı izler.

const sentinel = document.createElement('div');
sentinel.id = 'scroll-sentinel';
contentDiv.after(sentinel);

const observer = new IntersectionObserver((entries) => {
 if (entries[0].isIntersecting && !isLoading) {
 loadMoreContent();
 }
});
observer.observe(sentinel);

Bu, bir kaydırma dinleyicisi takma ihtiyacını ortadan kaldırır ve ana iplik üzerinde önemli ölçüde daha hafiftir.

End-of-Content Gracely

Daha fazla veri bulunmadığında, sonsuz kaydırma yüklemeye çalışmayı bırakmalı. Basit bir bayrak veya sunucudan bir cevap bunu kontrol edebilir.

let hasMoreContent = true;

async function loadMoreContent() {
 if (!hasMoreContent) return;
 // ... fetch data
 if (response.data.length === 0) hasMoreContent = false;
}

AJAX ile Gerçek Veri Yükleniyor

Sonsuz kaydırma dinamiği yapmak için, AJAX kullanarak bir sunucudan veri almanız gerekir. Fetch API modern standarttır.

Fetch API Örnek Örnek

Bu örnek, sunucunuzun, URL veya bir sayfa numarası parametresi ile paginated JSON verilerini sağladığı varsayıyor.

const contentUrl = '/api/items?page=1';
let currentPage = 1;

async function loadMoreContent() {
 isLoading = true;
 loadingIndicator.style.display = 'block';

 try {
 const response = await fetch(`/api/items?page=${++currentPage}`);
 if (!response.ok) throw new Error('Network error');
 const data = await response.json();

 data.items.forEach(item => {
 const el = document.createElement('div');
 el.className = 'item';
 el.textContent = item.title;
 contentDiv.appendChild(el);
 });

 // If the server indicates no more data, disable loading
 if (data.is_last_page) hasMoreContent = false;
 } catch (error) {
 console.error('Failed to load content:', error);
 } finally {
 isLoading = false;
 loadingIndicator.style.display = 'none';
 }
}

Server Responses ve hataları

Her zaman sağlam bir hata işlemi içerir. Bir yeniden deneme seçeneği göster, eğer getirmezse ve sınırsız yükleme döngülerinden kaçınır.Daha iyi bir kullanıcı deneyimi için, "Bir "Bir dahaki sefere" bir mesajla "Try" düğmesine bas.

Kullanıcı Deneyimi Gelişiyor

Smooth UX, kullanıcıları korumak için kritiktir. İşte dikkate alınması gereken birkaç gelişmedir.

Yükleme Göstergeleri

Daha fazla içerikin getirdiğini göstermek için bir spinner, ilerleme bar veya iskelet ekranları kullanın. Bu, sitenin çalıştığı kullanıcıları güvence altına alır.

<div id="loading" class="loading-spinner"></div>

spinners için CSS animasyonları hafiftir. iskelet ekranları için, son içerik düzeni taklit eden yer sahipleri bloklar yaratır.

Accessability considerations

Accessible sonsuz kaydırma gerektirir:

  • [FONT:0)Focus yönetimi:[Dönetici:[Dönder: 1) Yeni eşya yüklendiğinde, onları ekran okuyucuları kullanımlarını duyur.
  • [[Dönetici:0)Keyboard navigasyonu:[Döneticileri yeni yüklenen içeriği klavye ile çevirebilir (Tab).
  • [FONT:0)Alternative to sonsuz kaydırma:) Açık kontrolü tercih eden kullanıcılar için bir "Load More" düğmesine tıklayın.
<div id="content" aria-live="polite">...</div>

Mobile Optimizasyon

Mobil cihazlarda, kaydırma olayı sık sık yangınlar, ancak Intersection Gözlemleyicisi daha güvenilirdir. Ayrıca, daha küçük görüşportları ve inertia için iletişim kurmak için eşleri ayarlamayı sağlar.

Gelişmiş Teknikler

Sosyal medya beslemeleri veya büyük kataloglar gibi yüksek performanslı durumlar için, bu optimizasyonları düşünün.

Lazy Yükleme Görüntüleri

Yeni içerik genellikle görüntüler içerir. Lazy bunları kullanarak arayışın: www.FLT:0) etiketleri veya [[Dönetici Gözlemleyicisi[Dönder: 1 ), bant genişliğini azaltmak ve ilk yük zamanını geliştirmek için.

<img src="placeholder.jpg" data-src="real-image.jpg" loading="lazy" alt="..." />

Büyük Listeler için Sanal Sayfalar

Sonsuz kaydırmanız binlerce DOM düğümünü yönetirse, performans bozulacaktır. Sanal kaydırma (veya pencereleme) sadece görünür öğeleri verir, hafıza kullanımını dramatik bir şekilde azaltır. Kütüphaneler gibi:0)Clusterize.js) veya Reaktif Sanallaştırma yardımcı olabilir, ancak basit durumlarda saf JavaScript uygulamaları mümkündür.

Kurulum İçerikleri

Algılanan gecikmeyi ortadan kaldırmak için, bir sonraki içerik kümesine ihtiyaç duyulmadan önce gizli bir konteynere yük. kullanıcı tetik noktaya geldiğinde, sadece önceden yüklenen elemanları görünür DOM'ya takas edin.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

JavaScript ile sonsuz kaydırmayı uygulamak, kullanıcının düzgün, sürekli bir tarama deneyimi sağlayarak önemli ölçüde iyileşebilir. Temel bir kaydırma dinleyicisinden, gözlemleyici ve tembel yüklemeye kadar, teknik herhangi bir web sitesinin ihtiyaçlarına göre uyarlanabilir. Performans ve erişilebilirliği dengelemek için her zaman geri yükleme mekanizmaları sağlayabilir ve burada belirtilen kod ve stratejiler ile, seyircinizin hayal kırıklığı olmadan devam etmesini sağlayan sonsuz bir özellik oluşturabilirsiniz.