CSS Scroll-Snap ile Snapping Scroll Bölümleri Nasıl Yapılır (fullpage.js alternatifi)
Yayınlanan: 2022-07-19Bu öğreticide, kullanıcı kaydırdıkça bir tam ekran bölümünden diğerine geçiş yapan bir sayfa yapacağız. Bu efekt fullpage.js
kütüphanesi tarafından popüler hale getirildi. Ancak şimdi, tam sayfadaki lisans değişiklikleri (artık bunun için ödeme yapmanız gerekiyor), yeni CSS kaydırma-snap modülü ve kesişim gözlemci API'sinin eksiksiz tarayıcı desteği nedeniyle daha iyi seçenekler var.
Yani, bir fullpage.js alternatifi arıyorsanız, bütün bir kütüphaneye bile ihtiyacınız olmayabilir, sadece kendiniz kodlayabilirsiniz!
Aslında, yakalama efekti %100 CSS'dir. JS, ekran "görüntüye geçtiğinde" öğeleri soldurmak için kullanılır.
İlham almak için CodePen'de bulunan Michelle Barker'ın bu "Dinozor Parkı kaydırmalı hızlı demosunu" kullanacağız:
Kesişme Gözlemcisi ile birleştirilmiş CSS kullanarak, sayfanın her tam ekran bölümünü hızlı kaydırma yapacağız ve görüntü alanına girdiğinde içeriği solduracağız.
Daha da iyisi, sadece ~ 30 satırlık JS kodu! Animasyonlar CSS ile yapılır; tek yapmamız gereken, bölümlerin ve içeriğin JS ile görüş alanımıza ne zaman girdiğini anlamak.
1) Sayfanızı Oluşturun
İlk olarak, bir sayfa oluşturmanız veya mevcut bir sayfayı bu basit efektle uyumlu olacak şekilde yapılandırmanız gerekir. Burada dikkat edilmesi gereken iki şey var:
Bölümlerimizi içeren bir <main>
öğesi kullanıyoruz. Bu ana öğe, içindeki <section>
öğelerinin her biri gibi 100vh'dir.
HTML:
CSS:
2) Yapışmayı CSS ile Yapılandırın
Burada her biri 100vh yüksekliğinde birden fazla bölüm olduğunu görebiliriz.
<main> öğesi de overflow-y:scroll ile 100vh'dir.
Kullanıcı için kaydırma davranışı, varsayılan web sayfasıyla aynıdır.
Yukarıda bahsedilen CSS'yi eklediyseniz, yakalama efekti zaten oyunda olacaktır. Nasıl çalıştığına bir göz atalım.
İlk olarak, " @media (min-height: 30em)
" sorgusu, yüksekliği kısa olan mobil ekran boyutları için yakalama efektini devre dışı bırakır. Ana bölümün altında, yakalamayı sağlayan bir özellik vardır:
Bu harika bir küçük özellik "bir tane olması durumunda kaydırma kapsayıcısında ne kadar kesin noktaların uygulanacağını ayarlar" (MDN).
Ve sonra bölümlerimizin altında:
Bu özellik "özellik, kutunun yakalama konumunu, yakalama kabının bağlantı noktası (hizalama kabı olarak) içindeki yakalama alanının (hizalama konusu olarak) hizalaması olarak belirtir" (MDN).
CSS kaydırmalı ek modül hakkında daha fazla bilgiyi buradan edinebilirsiniz:
Ve bu kadar basit. <main> kapsayıcısındaki (tüm bölümler) doğrudan çocuklar, <main> kapsayıcısının ortasına kaydırılarak yapışacaktır. Hem Ana hem de Bölüm 100vh olduğundan, kaydırma bölümden bölüme geçecektir.
3) Kavşak Gözlemcisini Kullanırken İçeriği Soldur
Artık tam sayfa kaydırma efektimiz var ve başka bir şey yapmak istemiyorsanız bu bölümü atlayabilir ve web sitenizin keyfini çıkarabilirsiniz. Ancak, her tam sayfa bölümü görüntülendiğinde, içerideki içeriği soldurmak istiyorum - benzersiz ve harika bir efekt (ayrıca fullpage.js ile mümkün olan).
Bunu yapmak için, <main> görünüm alanımızdaki bölümlerin konumlarını anlamak için kesişim gözlemcisini kullanacağız.
Burada yapılan iki şey var. İlk olarak, bir bölümün görünüm alanında olduğunu tanımlar ve girerken bir CSS sınıfı .is-visible
ekler. Görünüm penceresinden çıkarken o sınıfı kaldırır.
Ek olarak, bu bölüm görüntü alanına girerken, arka arkaya (birbiri ardına) alt öğelerin her biri için 250ms gecikme özelliğini ayarlar. Bu, kademeli bir solmaya neden olur.
Bunu yalnızca veri içeriği özniteliğine sahip öğeler içindeki çocuklara yapar. Bu nedenle, solmanın etkili olmasını istiyorsanız, bunu sayfa içeriğinizin etrafındaki sarmalayıcılara eklemeniz gerekir.
Şimdi, bu işi yapmak için, .is-visible sınıfının eklendiği öğeler için fade-in animasyonunu ayarlamamız gerekiyor.
Başlangıç demosundan HTML'ye geri dönersek, içeriğin etrafında .section__content sınıfı ve data-content özniteliği ile sarmalanan bir div olduğunu göreceksiniz.
Bu, JS ve CSS'mizi birbirine bağlar. Opaklık, görünüm alanına girdiğinde kesişim gözlemcisi tarafından .is-visible
sınıfı eklenene kadar içerik için 0'dır. Ayrıldığında, 0'lık bir opaklığa geri döner, bu nedenle kaydırma yönünüz ne olursa olsun, her zaman etkin bir besleme olacaktır.
Son olarak, her bir alt öğeye ardışık olarak uygulanan delay
, yavaşlama efektini kademelendirir.
Üçüncü bölüme dikkat edin. Bölüm başlığı bir veri içeriği bölümünde değildir, bu nedenle kaybolmaz (zaten orada olacaktır).
Tüm Kod
İşte demo:
Demomuzda kullandığımız tüm kodlar:
HTML
CSS
JS
Çözüm
Bu, yalnızca tam ekran bölümleri arasında geçiş yapmakla kalmayan mükemmel bir fullpage.js alternatifidir. Ayrıca, bir bölümün sayfaya ne zaman girdiğini anlamak ve ardından dinamik olarak kademeli bir animasyon uygulamak için kesişim gözlemcisi API'sini kullandık. Minimal Vanilla JS ve CSS ile gerçekten harika efektler oluşturmak ve yapmak için bu temel örneği kullanabilirsiniz.