Kaydırma odaklı animasyonlar oluşturmak için Kaydırma Zaman Çizelgeleri ve Görünüm Zaman Çizelgeleri ile nasıl çalışacağınızı öğrenin.
Kaydırma odaklı animasyonlar
Kaydırmayla çalışan animasyonlar, web'de yaygın olarak kullanılan bir kullanıcı deneyimi modelidir. Kaydırma odaklı animasyon, kaydırma kapsayıcısının kaydırma konumuna bağlıdır. Bu, siz yukarı veya aşağı kaydırırken bağlı animasyonun doğrudan yanıt olarak ileri veya geri sarmaladığı anlamına gelir. Paralaks arka plan resimleri veya siz kaydırırken hareket eden okuma göstergeleri gibi efektler buna örnek gösterilebilir.
Kaydırmaya dayalı animasyona benzer bir tür olan, bir öğenin kaydırma kapsayıcısı içindeki konumuna bağlanan bir animasyondur. Örneğin, öğeler görüntüye girerken yavaşça görünebilir.
Bu tür efektleri gerçekleştirmenin klasik yolu, ana iş parçacığında kaydırma etkinliklerine yanıt vermektir. Bu da iki temel soruna yol açar:
- Modern tarayıcılar, kaydırma işlemini ayrı bir işlemde gerçekleştirir ve bu nedenle kaydırma etkinliklerini eşzamansız olarak yayınlar.
- Ana iş parçacığı animasyonları jant'a tabidir.
Bu durum, kaydırmayla senkronize çalışan ve yüksek performanslı kaydırma animasyonlarının oluşturulmasını imkansız veya çok zor hale getirir.
Chrome sürüm 115'ten itibaren bildirime dayalı kaydırmaya dayalı animasyonları etkinleştirmek için kullanabileceğiniz yeni bir dizi API ve kavram bulunmaktadır: Kaydırma Zaman Çizelgeleri ve Zaman Çizelgelerini Görüntüleme.
Bu yeni kavramlar, mevcut Web Animasyonları API'si (WAAPI) ve CSS Animasyonları API'si ile entegre olur. Böylece, mevcut API'lerin sunduğu avantajlardan yararlanabilirler. Kaydırmayla çalışan animasyonların ana iş parçacığında çalıştırılmasına olanak tanır. Evet, doğru okudunuz: Artık yalnızca birkaç satır ek kodla kaydırmayla çalışan, ana iş parçacığında çalışan, son derece akıcı animasyonlar oluşturabilirsiniz. Neleri beğenmeyebilirsiniz?
Web'deki animasyonlar hakkında kısa bir özet
CSS ile web'de animasyonlar
CSS'de animasyon oluşturmak için @keyframes
at-kuralı kullanarak bir animasyon karesi grubu tanımlayın. animation-name
özelliğini kullanarak öğeyi bir öğeye bağlarken animasyonun ne kadar süreceğini belirlemek için animation-duration
ayarlayın. animation-*
uzun biçimli özelliklerinin (animation-easing-function
ve animation-fill-mode
bunlardan yalnızca birkaçı) tümü animation
kısa biçiminde birleştirilebilir.
Örneğin, aşağıdaki animasyonda X eksenindeki bir öğe büyütülürken arka plan rengi de değiştirilmektedir:
@keyframes scale-up {
from {
background-color: red;
transform: scaleX(0);
}
to {
background-color: darkred;
transform: scaleX(1);
}
}
#progressbar {
animation: 2.5s linear forwards scale-up;
}
JavaScript ile web'de animasyonlar
JavaScript'te, tam olarak aynı sonucu elde etmek için Web Animasyonları API'si kullanılabilir. Bunu yeni Animation
ve KeyFrameEffect
örnekleri oluşturarak veya çok daha kısa olan Element
animate()
yöntemini kullanarak yapabilirsiniz.
document.querySelector('#progressbar').animate(
{
backgroundColor: ['red', 'darkred'],
transform: ['scaleX(0)', 'scaleX(1)'],
},
{
duration: 2500,
fill: 'forwards',
easing: 'linear',
}
);
Yukarıdaki JavaScript snippet'inin bu görsel sonucu, önceki CSS sürümüyle aynıdır.
Animasyon zaman çizelgeleri
Bir öğeye eklenen animasyon varsayılan olarak doküman zaman çizelgesinde çalışır. Başlangıç zamanı, sayfa yüklendiğinde 0'dan başlar ve saat ilerledikçe ileriye doğru akmaya başlar. Bu, varsayılan animasyon zaman çizelgesidir ve şimdiye kadar erişebildiğiniz tek animasyon zaman çizelgesidir.
Kaydırma Odaklı Animasyonlar Spesifikasyonu, kullanabileceğiniz iki yeni zaman çizelgesi türü tanımlar:
- Kaydırma ilerleme zaman çizelgesi: Belirli bir eksen boyunca kaydırma kapsayıcısının kaydırma konumuna bağlı bir zaman çizelgesi.
- İlerleme Zaman Çizelgesini Görüntüleme: Belirli bir öğenin kaydırma kapsayıcısı içindeki göreli konumuna bağlı bir zaman çizelgesi.
İlerleme zaman çizelgesini kaydırın
Kaydırma ilerleme zaman çizelgesi, belirli bir eksen boyunca kaydırma alanı veya kaydırma çubuğu olarak da adlandırılan kaydırma kapsayıcısının kaydırma konumundaki ilerlemeyle bağlantılı bir animasyon zaman çizelgesidir. Kaydırma aralığındaki bir konumu ilerleme yüzdesine dönüştürür.
Başlangıç kaydırma konumu% 0 ilerleme durumunu, bitiş kaydırma konumu ise% 100 ilerleme durumunu temsil eder. Aşağıdaki görselde, kaydırma çubuğunu yukarıdan aşağıya doğru kaydırdığınızda ilerlemenin% 0'dan% 100'e kadar sayıldığını görebilirsiniz.
✨ Kendiniz deneyin
Kaydırma ilerleme zaman çizelgesi genellikle "Kaydırma zaman çizelgesi" olarak kısaltılır.
İlerleme Zaman Çizelgesini Görüntüleme
Bu zaman çizelgesi türü, bir öğenin kaydırma kapsayıcısı içindeki göreli ilerlemesiyle bağlantılıdır. Kaydırma ilerleme zaman çizelgesi gibi, kaydırma çubuğunun kaydırma ofseti de izlenir. Kaydırma ilerleme zaman çizelgesinin aksine, ilerlemeyi belirleyen şey, bir öznenin kaydırma çubuğundaki göreli konumudur.
Bu, bir öğenin kaydırma çubuğunda ne kadar görünür olduğunu izleyebilen IntersectionObserver
işlevinin işleyişine benzer. Öğe kaydırma çubuğunda görünmüyorsa kesişmiyordur. Kaydırma çubuğunun içinde görünüyorsa (en küçük parçada bile) kesişiyor demektir.
Görüntüleme İlerleme Zaman Çizelgesi, bir öznenin kaydırma çubuğuyla kesişmeye başladığı andan başlar ve öznenin kaydırma çubuğuyla kesişmeyi bıraktığı anda sona erer. Aşağıdaki görselleştirmede, konu kaydırma kapsayıcısına girdiğinde ilerlemenin% 0'dan itibaren sayılmaya başladığını ve konu, kaydırma kapsayıcıdan ayrıldığı anda% 100'e ulaştığını görebilirsiniz.
✨ Kendiniz deneyin
Görüntüleme İlerleme Zaman Çizelgesi, genellikle "Zaman Çizelgesini Görüntüleme" şeklinde kısaltılır. Zaman Çizelgesini Görüntüleme Zaman Çizelgesi'nin belirli bölümlerini öznenin boyutuna göre hedeflemek mümkündür, ancak daha sonra bu konuyla ilgili daha fazla bilgi verilebilir.
Kaydırma ilerleme zaman çizelgelerini pratik bir şekilde kullanma
CSS'de anonim bir kaydırma ilerleme zaman çizelgesi oluşturma
CSS'de kaydırma zaman çizelgesi oluşturmanın en kolay yolu scroll()
işlevini kullanmaktır. Bu işlem, yeni animation-timeline
mülkünün değeri olarak ayarlayabileceğiniz anonim bir Kaydırma Zaman Çizelgesi oluşturur.
Örnek:
@keyframes animate-it { … }
.subject {
animation: animate-it linear;
animation-timeline: scroll(root block);
}
scroll()
işlevi bir <scroller>
ve bir <axis>
bağımsız değişkeni kabul eder.
<scroller>
bağımsız değişkeni için kabul edilen değerler şunlardır:
nearest
: En yakın üst öğe kaydırma kapsayıcısını (varsayılan) kullanır.root
: Kaydırma kapsayıcısı olarak belge görüntü alanını kullanır.self
: Öğenin kendisini kaydırma kapsayıcısı olarak kullanır.
<axis>
bağımsız değişkeni için kabul edilen değerler şunlardır:
block
: Kaydırma kapsayıcısının blok ekseni boyunca ilerleme ölçümünü kullanır (varsayılan).inline
: Kaydırma kapsayıcısının satır içi ekseni boyunca ilerleme ölçüsünü kullanır.y
: Kaydırma kapsayıcısının y ekseni boyunca ilerleme ölçüsünü kullanır.x
: Kaydırma kapsayıcının x ekseni boyunca ilerleme ölçümünü kullanır.
Örneğin, bir animasyonu blok eksenindeki kök kaydırma çubuğuna bağlamak için scroll()
parametresine root
ve block
değerleri gönderilir. Bu değerlerin toplamı scroll(root block)
'tür.
Demo: Okuma ilerleme göstergesi
Bu demoda, görüntü alanının üst kısmına sabitlenmiş bir okuma ilerleme göstergesi vardır. Siz sayfayı aşağı kaydırdıkça, dokümanın sonuna ulaştığında ilerleme çubuğu tam görüntü alanı genişliğini kaplayana kadar büyür. Animasyonu yürütmek için anonim bir Kaydırma İlerleme Zaman Çizelgesi kullanılıyor.
✨ Kendiniz deneyin
Okuma ilerleme göstergesi, sabit konum kullanılarak sayfanın en üstüne yerleştirilir. Kompozit animasyonlardan yararlanmak için width
değil, öğe bir transform
kullanılarak x ekseninde küçültülür.
<body>
<div id="progress"></div>
…
</body>
@keyframes grow-progress {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
#progress {
position: fixed;
left: 0; top: 0;
width: 100%; height: 1em;
background: red;
transform-origin: 0 50%;
animation: grow-progress auto linear;
animation-timeline: scroll();
}
#progress
öğesindeki grow-progress
animasyonunun zaman çizelgesi, scroll()
kullanılarak oluşturulan anonim bir zaman çizelgesi olarak ayarlanır. scroll()
bağımsız değişkenine bağımsız değişken verilmediğinden varsayılan değerlerine geri döner.
İzlenecek varsayılan kaydırma çubuğu nearest
, varsayılan eksen ise block
'dur. Bu, #progress
öğesine en yakın kaydırma çubuğu olduğu için kök kaydırma çubuğunu etkili bir şekilde hedefler ve aynı zamanda blok yönünü izler.
CSS'de adlandırılmış bir kaydırma ilerleme zaman çizelgesi oluşturma
Kaydırma ilerleme zaman çizelgesi tanımlamanın alternatif bir yolu, adlandırılmış bir zaman çizelgesi kullanmaktır. Bu yöntem biraz daha ayrıntılı olsa da üst kaydırma çubuğunu veya kök kaydırma çubuğunu hedeflemediğiniz, sayfanın birden fazla zaman çizelgesi kullandığı veya otomatik aramaların çalışmadığı durumlarda yararlı olabilir. Bu sayede, kaydırma ilerleme zaman çizelgesini verdiğiniz adla tanımlayabilirsiniz.
Bir öğede adlandırılmış Kaydırma İlerleme Zaman Çizelgesi'ni oluşturmak için kaydırma kapsayıcısındaki scroll-timeline-name
CSS özelliğini istediğiniz bir tanımlayıcıya ayarlayın. Değer --
ile başlamalıdır.
Hangi eksenin izleneceğini değiştirmek için scroll-timeline-axis
mülkünü de belirtin. İzin verilen değerler, scroll()
işlevinin <axis>
bağımsız değişkeniyle aynıdır.
Son olarak, animasyonu Kaydırma İlerleme Zaman Çizelgesi'ne bağlamak için öğenin üzerindeki animation-timeline
özelliğini, scroll-timeline-name
için kullanılan tanımlayıcıyla aynı değere ayarlayın.
Kod Örneği:
@keyframes animate-it { … }
.scroller {
scroll-timeline-name: --my-scroller;
scroll-timeline-axis: inline;
}
.scroller .subject {
animation: animate-it linear;
animation-timeline: --my-scroller;
}
İsterseniz scroll-timeline-name
ve scroll-timeline-axis
kısaltmalarını scroll-timeline
kısaltmasında birleştirebilirsiniz. Örneğin:
scroll-timeline: --my-scroller inline;
Demo: Yatay bant adım göstergesi
Bu demoda, her resim bandının üzerinde bir adım göstergesi gösterilmektedir. Bir bant üç resim içerdiğinde, gösterge çubuğu% 33 genişlikten başlar ve o anda üç resimden birincisine baktığınızı belirtir. Son resim görünümde olduğunda (kaydırıcının sonuna kadar kaydırması tarafından belirlendiğinde), gösterge kaydırıcının tam genişliğini kaplar. Animasyonu yönlendirmek için adlandırılmış bir Kaydırma İlerleme Zaman Çizelgesi kullanılır.
✨ Kendiniz deneyin
Bir galeri için temel işaretleme şu şekildedir:
<div class="gallery" style="--num-images: 2;">
<div class="gallery__scrollcontainer">
<div class="gallery__progress"></div>
<div class="gallery__entry">…</div>
<div class="gallery__entry">…</div>
</div>
</div>
.gallery__progress
öğesi, .gallery
sarmalayıcı öğesi içinde mutlak olarak konumlandırılmıştır. Başlangıç boyutu, --num-images
özel mülküne göre belirlenir.
.gallery {
position: relative;
}
.gallery__progress {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 1em;
transform: scaleX(calc(1 / var(--num-images)));
}
.gallery__scrollcontainer
, içerdiği .gallery__entry
öğelerini yatay olarak düzenler ve kaydırılan öğedir. Kaydırma konumu izlenerek .gallery__progress
animasyonlu hale gelir. Bu işlem, adlandırılmış Kaydırma İlerleme Zaman Çizelgesi --gallery__scrollcontainer
'ne başvurarak yapılır.
@keyframes grow-progress {
to { transform: scaleX(1); }
}
.gallery__scrollcontainer {
overflow-x: scroll;
scroll-timeline: --gallery__scrollcontainer inline;
}
.gallery__progress {
animation: auto grow-progress linear forwards;
animation-timeline: --gallery__scrollcontainer;
}
JavaScript ile Kaydırma İlerleme Zaman Çizelgesi Oluşturma
JavaScript'te Kaydırma Zaman Çizelgesi oluşturmak için ScrollTimeline
sınıfının yeni bir örneğini oluşturun. Takip etmek istediğiniz source
ve axis
ile bir mülk çantasını geçin.
source
: Kaydırma çubuğunu izlemek istediğiniz öğeye ait referans. Kök kaydırma çubuğunu hedeflemek içindocument.documentElement
simgesini kullanın.axis
: Hangi eksenin izleneceğini belirler. CSS varyantına benzer şekilde, kabul edilen değerlerblock
,inline
,x
vey
'dır.
const tl = new ScrollTimeline({
source: document.documentElement,
});
Etiketi bir Web Animasyonuna eklemek için timeline
özelliği olarak aktarın ve varsa duration
özelliğini atlayın.
$el.animate({
opacity: [0, 1],
}, {
timeline: tl,
});
Demo: Okuma ilerleme göstergesi, yeniden ziyaret edildi
Aynı işaretlemeyi kullanarak okuma ilerleme göstergesini JavaScript ile yeniden oluşturmak için aşağıdaki JavaScript kodunu kullanın:
const $progressbar = document.querySelector('#progress');
$progressbar.style.transformOrigin = '0% 50%';
$progressbar.animate(
{
transform: ['scaleX(0)', 'scaleX(1)'],
},
{
fill: 'forwards',
timeline: new ScrollTimeline({
source: document.documentElement,
}),
}
);
Görsel sonuç, CSS sürümünde aynıdır: Oluşturulan timeline
, kök kaydırma çubuğunu izler ve sayfayı kaydırırken #progress
'yi x ekseninde% 0'dan% 100'e kadar ölçeklendirir.
✨ Kendiniz deneyin
İlerleme durumunu görüntüleme zaman çizelgesi ile pratik bilgiler
CSS'de anonim görüntüleme ilerleme zaman çizelgesi oluşturma
İlerleme durumunu görüntüleme zaman çizelgesi oluşturmak için view()
işlevini kullanın. Kabul edilen bağımsız değişkenleri <axis>
ve <view-timeline-inset>
'dır.
<axis>
, Kaydırma İlerleme Zaman Çizelgesi'ndeki ile aynıdır ve hangi eksenin izleneceğini tanımlar. Varsayılan değer:block
.<view-timeline-inset>
ile, bir öğenin görünümde olup olmadığını belirlemek için sınırları ayarlamak üzere bir ofset (pozitif veya negatif) belirtebilirsiniz. Değer, yüzde veyaauto
olmalıdır.auto
varsayılan değerdir.
Örneğin, bir animasyonu blok ekseninde kaydırma çubuğuyla kesişen bir öğeye bağlamak için view(block)
öğesini kullanın. scroll()
'e benzer şekilde, bunu animation-timeline
mülkünün değeri olarak ayarlayın ve animation-duration
değerini auto
olarak ayarlamayı unutmayın.
Aşağıdaki kodu kullanarak, siz kaydırırken her img
, görüntü alanını geçerken yavaşça görünür hale gelir.
@keyframes reveal {
from { opacity: 0; }
to { opacity: 1; }
}
img {
animation: reveal linear;
animation-timeline: view();
}
Intermezzo: Zaman Çizelgesi aralıklarını görüntüleyin
Varsayılan olarak, Zaman Çizelgesi Görünümü'ne bağlı bir animasyon, zaman çizelgesi aralığının tamamına eklenir. Bu etkinlik, öznenin kaydırma çubuğuna girmek üzere olduğu andan başlar ve özne kaydırma çubuğundan tamamen çıktığında sona erer.
Eklenmesi gereken aralığı belirterek zaman çizelgesini Görünüm Zaman Çizelgesi'nin belirli bir bölümüne bağlamak da mümkündür. Örneğin, bu durum yalnızca özne kaydırma çubuğuna girerken gerçekleşebilir. Aşağıdaki görselleştirmede, konu kaydırma kapsayıcısına girdiğinde ilerleme% 0'dan itibaren sayılmaya başlar ancak tamamen kesiştiği andan itibaren% 100'e ulaşır.
Hedefleyebileceğiniz olası Zaman Çizelgesi görüntüleme aralıkları şunlardır:
cover
: Görüntüleme ilerleme zaman çizelgesinin tüm aralığını gösterir.entry
: Ana hesap kutusunun, görüntüleme ilerleme durumu görünürlük aralığına girdiği aralığı gösterir.exit
: Ana kutunun, görüntüleme ilerleme görünürlük aralığından çıktığı aralığı temsil eder.entry-crossing
: Ana kutunun son kenarlık kenarını geçtiği aralığı gösterir.exit-crossing
: Ana kutunun başlangıç kenarlığı kenarını geçtiği aralığı gösterir.contain
: Ana kutunun, kaydırma alanındaki görüntüleme ilerleme görünürlük aralığının tamamını kapladığı veya bu aralığın tamamına sığdığı aralığı temsil eder. Bu, öznenin kaydırma çubuğundan daha uzun veya daha kısa olmasına bağlıdır.
Bir aralık tanımlamak için aralık başlangıcı ve aralık sonu ayarlamanız gerekir. Her biri, aralık adı (yukarıdaki listeye bakın) ve bu aralık adı içindeki konumu belirlemek için bir aralık ofsetinden oluşur. Aralık uzaklığı genellikle 0%
- 100%
aralığında bir yüzdedir, ancak 20em
gibi sabit bir uzunluk da belirtebilirsiniz.
Örneğin, bir öznenin girdiği andan itibaren animasyon çalıştırmak istiyorsanız aralık başlangıcı olarak entry 0%
'yi seçin. Görevin konu girildiği sırada tamamlanması için aralık sonu değeri olarak entry 100%
'yi seçin.
CSS'de bunu animation-range
özelliğini kullanarak ayarlarsınız. Örnek:
animation-range: entry 0% entry 100%;
JavaScript'te rangeStart
ve rangeEnd
özelliklerini kullanın.
$el.animate(
keyframes,
{
timeline: tl,
rangeStart: 'entry 0%',
rangeEnd: 'entry 100%',
}
);
Her aralık adının neyi temsil ettiğini ve yüzdelerin başlangıç ile bitiş konumlarını nasıl etkilediğini görmek için aşağıda yerleştirilmiş aracı kullanın. Başlangıç aralığını entry 0%
, bitiş aralığını cover 50%
olarak ayarlayıp animasyon sonucunu görmek için kaydırma çubuğunu sürükleyin.
Kayıt izleme
Zaman çizelgesi aralıklarını görüntüleme araçlarını kullanırken fark edebileceğiniz gibi, bazı aralıklar iki farklı aralık adı + aralık ofseti kombinasyonuyla hedeflenebiliyor. Örneğin, entry 0%
, entry-crossing 0%
ve cover 0%
aynı bölgeyi hedefler.
range-start ve range-end aynı range-name değerini hedeflediğinde ve% 0 ile %100 arasındaki tüm aralığı kapsadığında değeri yalnızca range-name olarak kısaltabilirsiniz. Örneğin, animation-range: entry 0% entry 100%;
çok daha kısa olan animation-range: entry
olarak yeniden yazılabilir.
Demo: Resim gösterme
Bu demoda, kaydırma bölmesine giren resimler yavaş yavaş görünür hale gelir. Bu işlem, anonim görüntüleme zaman çizelgesi kullanılarak yapılır. Animasyon aralığı, her bir resim kaydırıcının yarısına gelindiğinde tam opaklığa sahip olacak şekilde ayarlandı.
✨ Kendiniz deneyin
Genişleme efekti, animasyonlu bir clip-path kullanılarak elde edilir. Bu efekt için kullanılan CSS şu şekildedir:
@keyframes reveal {
from { opacity: 0; clip-path: inset(0% 60% 0% 50%); }
to { opacity: 1; clip-path: inset(0% 0% 0% 0%); }
}
.revealing-image {
animation: auto linear reveal both;
animation-timeline: view();
animation-range: entry 25% cover 50%;
}
CSS'de adlandırılmış bir ilerleme durumunu görüntüleme zaman çizelgesini görüntüleme
Kaydırma zaman çizelgelerinin adlandırılmış sürümlerine benzer şekilde, adlandırılmış görüntüleme zaman çizelgeleri de oluşturabilirsiniz. scroll-timeline-*
özellikleri yerine view-timeline-
önekini taşıyan varyantları (view-timeline-name
ve view-timeline-axis
) kullanırsınız.
Aynı tür değerler geçerlidir ve adlandırılmış bir zaman çizelgesini aramak için aynı kurallar geçerlidir.
Demo: Resim gösterme, yeniden ziyaret
Daha önceki resim gösterme demosunu yeniden çalışarak düzeltilen kod şu şekilde görünür:
.revealing-image {
view-timeline-name: --revealing-image;
view-timeline-axis: block;
animation: auto linear reveal both;
animation-timeline: --revealing-image;
animation-range: entry 25% cover 50%;
}
view-timeline-name: revealing-image
kullanıldığında öğe, en yakın kaydırma çubuğunda izlenir. Ardından, aynı değer animation-timeline
mülkü için değer olarak kullanılır. Görsel çıkış, öncekiyle aynıdır.
✨ Kendiniz deneyin
JavaScript'de Görüntüleme İlerleme Zaman Çizelgesi Oluşturma
JavaScript'te görüntüleme zaman çizelgesi oluşturmak için ViewTimeline
sınıfının yeni bir örneğini oluşturun. Takip etmek istediğiniz subject
, axis
ve inset
çantalarını ekleyin.
subject
: Kendi kaydırma çubuğunda izlemek istediğiniz öğeye referans verir.axis
: İzlenecek eksen. CSS varyantına benzer şekilde, kabul edilen değerlerblock
,inline
,x
vey
'dır.inset
: Kutunun görünür durumda olup olmadığı belirlenirken kaydırma noktasının ek (pozitif) veya dışa dönük (negatif) düzenlemesi.
const tl = new ViewTimeline({
subject: document.getElementById('subject'),
});
Bir web animasyonuna eklemek için timeline
mülkü olarak iletin ve varsa duration
öğelerini çıkarın. İsteğe bağlı olarak rangeStart
ve rangeEnd
özelliklerini kullanarak aralık bilgilerini iletin.
$el.animate({
opacity: [0, 1],
}, {
timeline: tl,
rangeStart: 'entry 25%',
rangeEnd: 'cover 50%',
});
✨ Kendiniz deneyin
Deneyebileceğiniz diğer özellikler
Bir animasyon karesi grubu içeren birden fazla Zaman Çizelgesi Görünümü aralığına ekleme
Liste girişlerinin animasyonlu olduğu bu kişi listesi demosuna göz atalım. Bir liste girişi kaydırma çubuğuna alttan girerken kaydırılır ve kaybolur, kaydırma çubuğundan üstten çıkarken kaydırılır ve kaybolur.
✨ Kendiniz deneyin
Bu demoda her öğe, kaydırma bağlantı noktasından geçerken izleyen bir Görünüm Zaman Çizelgesi ile dekore edilmiştir ancak kaydırmaya dayalı iki animasyon buna eklenmiştir. animate-in
animasyonu, zaman çizelgesinin entry
aralığına, animate-out
animasyonu ise zaman çizelgesinin exit
aralığına eklenir.
@keyframes animate-in {
0% { opacity: 0; transform: translateY(100%); }
100% { opacity: 1; transform: translateY(0); }
}
@keyframes animate-out {
0% { opacity: 1; transform: translateY(0); }
100% { opacity: 0; transform: translateY(-100%); }
}
#list-view li {
animation: animate-in linear forwards,
animate-out linear forwards;
animation-timeline: view();
animation-range: entry, exit;
}
İki farklı aralığa ekli iki farklı animasyon çalıştırmak yerine, aralık bilgilerini zaten içeren bir animasyon karesi grubu oluşturmak da mümkündür.
@keyframes animate-in-and-out {
entry 0% {
opacity: 0; transform: translateY(100%);
}
entry 100% {
opacity: 1; transform: translateY(0);
}
exit 0% {
opacity: 1; transform: translateY(0);
}
exit 100% {
opacity: 0; transform: translateY(-100%);
}
}
#list-view li {
animation: linear animate-in-and-out;
animation-timeline: view();
}
Ana kareler aralık bilgilerini içerdiğinden animation-range
değerini belirtmeniz gerekmez. Sonuç, öncekiyle tam olarak aynıdır.
✨ Kendiniz deneyin
Üst öğesi olmayan bir Kaydırma Zaman Çizelgesi'ne ekleme
Adlandırılmış Kaydırma Zaman Çizelgeleri ve adlandırılmış Görüntüleme Zaman Çizelgeleri için arama mekanizması yalnızca ata kaydırmalarla sınırlıdır. Ancak çoğu zaman, animasyon uygulanması gereken öğe, izlenmesi gereken kaydırma çubuğunun alt öğesi değildir.
Bu işlemin gerçekleşmesi için timeline-scope
mülkü devreye girer. Bu özelliği, aslında oluşturmadan bu ada sahip bir zaman çizelgesi tanımlamak için kullanırsınız. Böylece bu ada sahip olan takvim daha geniş bir kapsamda yer alıyor. Uygulamada, bir alt kaydırma çubuğunun zaman çizelgesinin ona bağlanabilmesi için ortak bir üst öğede timeline-scope
mülkünü kullanırsınız.
Örneğin:
.parent {
timeline-scope: --tl;
}
.parent .scroller {
scroll-timeline: --tl;
}
.parent .scroller ~ .subject {
animation: animate linear;
animation-timeline: --tl;
}
Bu snippet'te:
.parent
öğesi,--tl
adlı bir zaman çizelgesi bildiriyor. Alt öğeleri bu değeri bulupanimation-timeline
özelliği için değer olarak kullanabilir..scroller
öğesi aslında--tl
adlı bir Kaydırma Zaman Çizelgesi tanımlar. Varsayılan olarak yalnızca alt öğeleri tarafından görülebilir ancak.parent
,scroll-timeline-root
olarak ayarlandığından bu öğeye eklenir..subject
öğesi--tl
zaman çizelgesini kullanır. Atası ağacında yukarı doğru ilerler ve.parent
üzerinde--tl
'yi bulur..parent
üzerindeki--tl
,.scroller
'nin--tl
'sini işaret ettiğinde.subject
, temel olarak.scroller
'nin Kaydırma İlerleme Zaman Çizelgesi'ni izler.
Başka bir deyişle, bir zaman çizelgesini bir üst öğeye taşımak için timeline-root
kullanabilirsiniz (bu işleme yükseltme denir). Böylece, üst öğenin tüm alt öğeleri bu zaman çizelgesine erişebilir.
timeline-scope
mülkü hem zaman çizelgelerini kaydırma hem de zaman çizelgelerini görüntüleme ile kullanılabilir.
Diğer demolar ve kaynaklar
Bu makalede ele alınan tüm demolar scroll-driven-animations.style mini sitesinde yer almaktadır. Web sitesinde, kaydırma odaklı animasyonlarla neler yapılabileceğini vurgulayan çok daha fazla demo bulunuyor.
Ek demolardan biri de albüm kapaklarının yer aldığı listedir. Her kapak, merkezdeki spot ışığını alırken 3D olarak döner.
✨ Kendiniz deneyin
Veya position: sticky
'ten yararlanan bu kartları yığma demosunu inceleyebilirsiniz. Kartlar yığıldıkça, önceden yapıştırılmış kartlar küçültülerek güzel bir derinlik efekti oluşturulur. En sonunda, tüm grup bir grup halinde görünümden çıkar.
✨ Kendiniz deneyin
Ayrıca scroll-driven-animations.style, bu gönderinin başlarında yer alan Zaman Çizelgesi Aralığı İlerleme Görünümü gibi bir araç koleksiyonudur.
Kaydırmayla çalışan animasyonlar, Google I/O 2023'teki Web Animasyonlarında yenilikler başlıklı oturumda da ele alınacaktır.