Kaydırma odaklı animasyonlarla ilgili örnek olaylar

Swetha Gopalakrishnan
Swetha Gopalakrishnan
Saurabh Rajpal
Saurabh Rajpal

Kaydırma odaklı animasyonlar, web'de yaygın bir kullanıcı deneyimi kalıbıdır. Kaydırma odaklı bir animasyon, bir kaydırma kapsayıcısının kaydırma konumuna bağlıdır. Bu, yukarı veya aşağı kaydırdığınızda bağlı animasyonun doğrudan tepki olarak ileri veya geri ilerleyeceği anlamına gelir. Paralaks arka plan resimleri veya siz ekranı kaydırdıkça hareket eden okuma göstergeleri gibi efektler buna örnek gösterilebilir.

Geliştiriciler genellikle ana iş parçacığındaki kaydırma etkinliklerine yanıt vermek için JavaScript kullanarak kaydırmaya dayalı animasyonlar oluştururlar. Bu, kaydırma etkinliklerinin eşzamansız olarak sunulması nedeniyle kaydırmayla senkronize olan ve kaydırmaya dayalı, yüksek performanslı animasyonların oluşturulmasını zorlaştırır ve ana iş parçacığında olması nedeniyle genellikle olumsuzluğa yol açar.

Ancak tarayıcılara eklenen yeni CSS ve kullanıcı arayüzü özelliklerinin bir parçası olarak, artık bildirim temelli kaydırmaya dayalı animasyonlar oluşturabilirsiniz. Mevcut Web Animasyonları API'si (WAAPI) ve CSS Animations API ile entegre olan yeni kavramlar olan Kaydırma Zaman Çizelgeleri ve Görüntüleme Zaman Çizelgeleri sayesinde, artık sadece birkaç satır kod girerek ana iş parçacığının tamamında sorunsuz, kaydırmaya dayalı animasyonlar elde edebilirsiniz. Bu örnek olayda, Tokopedia, redBus ve Policybazaar'ın bu yeni özellikten nasıl yararlandığını keşfedin.

Tarayıcı Desteği

  • 115
  • 115
  • x

Kaynak

Tokopedia

Tokopedia, sayfa performansını optimize etmek ve e-ticaret dönüşüm hunisi genelinde genel göz atma deneyimini geliştirmek için önceki özel JavaScript uygulamalarını Kaydırma tabanlı animasyonlarla değiştirdi.

Geleneksel JavaScript kaydırma etkinliklerine kıyasla kod satırlarımızı% 80'e kadar azaltmayı başardık ve kaydırma sırasında ortalama CPU kullanımının% 50'den% 2'ye düştüğünü gözlemledik. Andy Wihalim, Kıdemli Yazılım Mühendisi, Tokopedia

Kullanıcının kaydırma konumuna göre üstteki yapışkan çubuğun görünürlüğünde değişiklik yapıldı.

Kod

Aşağıdaki uygulamada, CSS animasyonunun ilerleme durumunu kontrol etmek amacıyla anonim kaydırma ilerleme durumu zaman çizelgesi ayarlamak için scroll() işlevi kullanılır. Üstteki yapışkan çubuğun görünürlüğü, tanımlanan animationRange içindeki kaydırma konumuna göre değişir.

const toggleBar = keyframes({
  to: { height: 48 },
});

export const cssWrapper = css({
  position: 'fixed',
  left: 0,
  width: '100vw',
  pointerEvents: 'none',
  marginTop: 120,
  height: 0,
  overflow: 'hidden',
  display: 'flex',
  flexDirection: 'column',
  justifyContent: 'flex-end',
  animation: `${toggleBar} linear both`,
  animationTimeline: 'scroll()',
  animationRange: '20px 70px',
});

redBus

redBus'ın yapılacaklar açılış sayfasında mobil ve masaüstü için farklı animasyonları bulunuyor. Bu sayfa, dönüşüm hunisinin tüm kullanıcılarına dönüşüm hunisinin başında gösteriliyor. Kaydırma odaklı animasyonlar sayesinde, aynı etkiyi elde etmek için bu özel JavaScript uygulamalarını CSS ile değiştirebildiler.

Kullanım alanları

Resim Gösterme (mobil için) ve Kapak Akışı (Masaüstü için) içeren Fotoğraf Galerisi.

Kaydırma odaklı animasyon görseli, redBus "Things To Do" fotoğraf galerisine resim yükleme efektini gösteriyor.

Kod (Mobil)

Önceki örnekte Tokopedia, anonim kaydırma ilerlemesi zaman çizelgesini kullandı. Aşağıdaki kodda redBus, adlandırılmış görüntüleme ilerleme zaman çizelgesini kullanır. Animasyon, öğenin en yakın üst kaydırma çubuğu (bu örnekte fotoğraf galerisi kaydırma çubuğu) içinde, tanımlanmış animation-range içindeki <img> öğesinin opacity ve clip-path öğelerini değiştirir.

const reveal = keyframes`
   from {
       opacity: 0;
       clip-path: inset(45% 20% 45% 20%);
   }
   to {
       opacity: 1;
       clip-path: inset(0% 0% 0% 0%);
   }`

const CardImage = styled.div`
   width: 100%;
   height: 100%;
   img {
       border-top-left-radius: 0.75rem;
       border-top-right-radius: 0.75rem;
       height: 100%;
       width: 100%;
       object-fit: cover;
       view-timeline-name: --revealing-image;
       view-timeline-axis: block;
  
       /* Attach animation, linked to the  View Timeline */
       animation: linear ${reveal} both;
       animation-timeline: --revealing-image;
  
       /* Tweak range when effect should run*/
       animation-range: entry 25% cover 50%;
   }
`;

Daha iyi deneyimle performansın mükemmel bir karışımı olan ve SEO için Sayfa Deneyimi sinyallerimizi güçlendirdiği için bu özelliği görmekten çok mutluyuz. Üstelik, minimum öğrenme eğrisi bunu her e-ticaret web sitesinde olmazsa olmaz bir özellik haline getirir. Ayrıca, daha fazla kullanıcı yolculuğu için SDA'dan yararlanmak amacıyla diğer ekiplerden olumlu geri bildirimler ve destek aldık. Amit Kumar, Kıdemli Mühendislik Yöneticisi, redBus.

Politika pazarı

Sigorta planlarının karşılaştırılması, karar alma süreçlerine yön vermek için kullanıcıların gerçekleştirdiği tekrarlanan temel bir işlemdir. Policybazaar, kaydırmaya dayalı animasyonlar kullanarak kullanıcının tabloyu kaydırmasına yanıt olarak düşük öncelikli öğelerin boyutunu küçülttü. Bu yöntem, hem sorunsuz bir kaydırma deneyimi hem de okunabilirliği iyileştirdi.

Kaydırmayla çalışan animasyonlar sayesinde, kullanıcının planları karşılaştırabilmesi için görüntü alanı alanını en üst düzeye çıkarmayı başardık. Bu da, odaklanmış ve düzenli bir okuma deneyimi sağladı.Rishabh Mehrotra, Head of Life for Life Insurance BU, PolicyBazaar.

Yatırım ve yaşam iş kolundaki (iş kolu) karşılaştırma planı tablosunda kaydırma odaklı animasyon animate-timeline.

Kod

Tokopedia'dan alınan önceki örneğine benzer şekilde Policybazaar, CSS animasyonunun ilerleme durumunu kontrol etmek için anonim kaydırma ilerleme durumu zaman çizelgesi ayarlamak için scroll() işlevini kullanıyor. Bu örnekte, yazı tipi boyutu küçültülüp tanımlanan animation-range içindeki kaydırma konumuna göre başlık soluklaştırılır.

@supports (animation-timeline: scroll()) {
.plan-comparison .inner-header {
animation: move-and-fade-header linear both;
}
.plan-comparison .left-side {
animation: shrink-name linear both;
}
.plan-comparison .inner-header, .plan-comparison .left-side {
animation-timeline: scroll();
animation-range: 0 150px;
}
}

@keyframes move-and-fade-header {
  to {
    translate: 0% -5%;
    top:103px;
}
}

@keyframes shrink-name {
  to {
    font-size: 1.5rem;
  }
}

Kullanıcı yolculuğunda ortak bir kalıp olarak kaydırmaya dayalı animasyonlar

Öne çıkan e-ticaret şirketlerinin tümü, kart içeren sayfalarda kaydırmayla yönelik animasyonlar kullandı ve kullanıcıların dikkatini çekmek için kartlardan animasyon hazırladı . Aşağıdaki örneklerde, kullanıcı yolculuğunun farklı bölümlerindeki kartlar üzerindeki kaydırma efektleri gösterilmektedir. Bu işlem genellikle, aşağıdaki CSS snippet'inde gösterildiği gibi, özel CSS animasyonunun ilerleme durumunu kontrol etmek için anonim görüntüleme ilerleme durumu zaman çizelgesi kullanılarak gerçekleştirilir.

@keyframes animate-in {
 0% { opacity: 0; transform: translateY(10%); }
 100% { opacity: 1; transform: translateY(0); }
}

@keyframes animate-out {
 0% { opacity: 1; transform: translateY(0); }
 100% { opacity: 0; transform: translateY(-10%); }
}

.flyin_animate {
   animation: animate-in linear forwards;
   animation-timeline: view();
   animation-range: entry;
}

redBus (Ana sayfa)

redBus "Yapılacaklar" açılış sayfasına ürün kartları yüklemek için kaydırma destekli animasyon ekleme efekti.

Policybazaar (Ürün Listeleme Sayfası)

Yatırım ve yaşam iş kolunda ürün kartlarının ekranı kaydırma hareketiyle beliren ve kaybolan animasyonlar (İş kolu).

Tokopedia (Ürün Ayrıntıları Sayfası)

Listelenen ürünler arasında gezinirken kararma, kaybolma animasyonu.

Scroll-driven Animations API'yi kullanırken dikkat edilmesi gerekenler

Desteklenmeyen tarayıcılar için, kaydırmaya dayalı animasyonlara çoklu dolgu yapmak mümkündür (örneğin, Kaydırma zaman çizelgesi çoklu dolgusu). Aksi takdirde, çerçevenizin çerçevenizle birlikte iyi çalıştığından ve çoklu dolguyu kullanan tarayıcıların animasyon hatası veya kötü deneyimler yaşamadığından emin olmak için ek testler yapmanız gerekir.

CSS'de, kaydırmaya dayalı animasyonları kullanmadan önce animasyon zaman çizelgesinin desteklenip desteklenmediğini test etmek için @supports kullanabilirsiniz. Örneğin:

@supports (animation-timeline: scroll()) {

}

Kaynaklar

E-ticaret şirketlerinin, Görüntüleme Geçişleri, Popover, Kapsayıcı Sorguları ve has() seçici gibi yeni CSS ve kullanıcı arayüzü özelliklerinden nasıl yararlandığının anlatıldığı bu serideki diğer makaleleri inceleyin.