İnfinite Scroll Nasıl Yapılır?
Bana konularımı çektieceğim infinite scroll lazım. Yardım edebilirseniz sevinirim!
Infinite scroll, hangi front-end javascript teknolojisini kullandığınıza göre farklı şekillerde yapılabilir. React, Vue veya Svelte kullanıyorsanız yeniden oluşturmanıza gerek kalmadan bunlara uygun bileşenler kullanabilirsiniz.
Diyelim ki JQuery kullanıyorsunuz. O zaman kendi yolunuzu kendiniz geliştirmelisiniz. Örnek olarak şöyle bir kod yazalım:
index.html
<html>
<head>
<title>Infinite Scroll</title>
<link rel="stylesheet" href="index.css" />
</head>
<body>
<div id="content">
<div class="page" style="background-color:red;">Sayfa 1</div>
</div>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="index.js"></script>
</body>
</html>
Örnek bir sayfa oluşturduk. Bu sayfaya index.css ve index.js dosyalarını da dahil ettik. Ayrıca CDN üzerinden jquery
de çağırdık.
Bir adet div#content
elementimizin içine bir adet div.page
elementi ekledik ve içine de Sayfa 1 yazdık.
Sonradan div#content
elementine eklenecek sayfalarla karışmasın diye div.page
elementine kırmızı bir arkaplan verdik. Buraya eklenecek diğer sayfalara da farklı arkaplan renkleri vereceğiz ve böylece sayfa geçişlerini görebilmiş olacağız.
index.css
* { margin: 0; padding:0; box-sizing: border-box; }
html, body { width:100vw; height:100vh; }
#content { width: 100vw; height: 100vh; overflow-y: scroll; }
#content .page { width: 100vw; height: 150vh; display: flex; align-items: center; justify-content:center; font-size:72px; }
html
ve body
elementlerinin ekranın tamamını kaplamasını sağladık.
div#content
elementimizin de aynı şekilde ekranın tamamını kaplamasını sağladık ve Y yönünde scroll özelliği olmasını istedik.
div.page
elementimize de ekranın %150'si kadar yükseklik verdik ve içindeki yazıyı ortaladık. HTML içinde inline olarak da zaten kırmızı renk vermiştik.
Şimdi amacımız, div#content
elementinde scroll olayı gerçekleştiğinde bu olayı dinlemek ve scroll eğer sayfanın sonuna gelmişse otomatik olarak yeni bir sayfa eklemek...
index.js
var bgColors = ["green","blue","yellow","red"];
var $content = $("#content");
$content.on("scroll", function(e) {
var contentScrollTop = $content.scrollTop() + $content.height();
var pageCount = $content.find(".page").length;
var contentHeight = $content.find(".page").height() * pageCount;
if(contentScrollTop - contentHeight < 100) {
$content.append("<div class='page' style='background-color:"+bgColors[pageCount%4]+"'>Sayfa "+pageCount+"</div>");
}
});
Kodları test edemedim ama aşağı yukarı böyle bir algoritma kullanabilirsiniz...
DÜZELTME
Yukarıdaki javascript kodlarında var $content = $(".content");
yazmışım.
var $content = $("#content");
olarak düzelttim.
O an hangi sayfayı görüntülediğimizin URL'ye yazılması konusu biraz daha detaylı bir konu. O an hangi sayfanın görüntülendiğini tespit edecek hesaplamalar yapmak veya inview
gibi JQuery eklentileri kullanmak mümkün. Bu sorunun kapsamı dışında olduğu için bu konuya girmiyorum. Inview kullanımını araştırabilirsiniz.