Skip to content
Mithril.js 2
Main Navigation KılavuzAPI

Türkçe

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
čeština
magyar

Türkçe

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
čeština
magyar

Görünüm

Sidebar Navigation

Başlangıç

Kurulum

Basit Uygulama

Kaynaklar

JSX

Eski Tarayıcılarda ES6+

Animasyonlar

Test

Örnekler

Üçüncü Taraf Entegrasyonu

Yol Yönetimi

Temel kavramlar

Sanal DOM Düğümleri

Bileşenler

Yaşam Döngüsü Yöntemleri

Anahtarlar

Otomatik Yeniden Çizim Sistemi

Çeşitli

Framework Karşılaştırması

v1.x'ten v2.x'e Geçiş

v0.2.x'ten Geçiş

API

Bu sayfada

Animasyonlar ​

Teknoloji Seçimleri ​

Animasyonlar genellikle uygulamaları daha canlı hale getirmek için kullanılır. Günümüzde tarayıcılar CSS animasyonları için iyi bir desteğe sahip ve hızlı JavaScript tabanlı animasyonlar sağlayan çeşitli kütüphaneler bulunmaktadır. Ayrıca, en son teknolojileri kullanmayı tercih ediyorsanız, gelişmekte olan bir Web API ve bir polyfill de mevcuttur.

Mithril.js, zengin ve karmaşık animasyonlar elde etmek için bu diğer seçenekler yeterli olduğundan, herhangi bir animasyon API'si sunmaz. Ancak Mithril.js, animasyonların uygulanmasının geleneksel olarak zor olduğu bazı özel durumlarda işleri kolaylaştırmak için yaşam döngüsü kancaları (hooks) sağlar.

Eleman Oluşturma Animasyonu ​

Bir elemanın oluşturulmasını CSS ile canlandırmak oldukça basittir. Normalde olduğu gibi bir CSS sınıfına bir animasyon eklemeniz yeterlidir:

css
.fancy {
  animation: fade-in 0.5s;
}
@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
javascript
var FancyComponent = {
  view: function () {
    return m('.fancy', 'Merhaba dünya');
  },
};

m.mount(document.body, FancyComponent);

Eleman Kaldırma Animasyonu ​

Bir elemanı kaldırmadan önce animasyon uygulama konusundaki sorun, elemanı tamamen kaldırmak için animasyonun bitmesini beklememiz gerekmesidir. Neyse ki, Mithril.js, elemanın kaldırılmasını geciktirmemize olanak tanıyan onbeforeremove kancasını sunar.

opacity değerini 1'den 0'a düşürerek kaybolma efekti veren bir exit animasyonu oluşturalım.

css
.exit {
  animation: fade-out 0.5s;
}
@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}

Şimdi, önceki bölümde oluşturduğumuz FancyComponent'ı gösterip gizleyen basit bir bileşen oluşturalım:

javascript
var on = true;

var Toggler = {
  view: function () {
    return [
      m(
        'button',
        {
          onclick: function () {
            on = !on;
          },
        },
        'Değiştir'
      ),
      on ? m(FancyComponent) : null,
    ];
  },
};

Ardından, kaldırıldığında solma efektiyle kaldıracak şekilde FancyComponent'ı değiştirelim:

javascript
var FancyComponent = {
  onbeforeremove: function (vnode) {
    vnode.dom.classList.add('exit');
    return new Promise(function (resolve) {
      vnode.dom.addEventListener('animationend', resolve);
    });
  },
  view: function () {
    return m('.fancy', 'Merhaba dünya');
  },
};

vnode.dom, bileşenin kök DOM elemanına (<div class="fancy">) işaret eder. Burada exit sınıfını <div class="fancy">'ye eklemek için classList API'sini kullanıyoruz.

Ardından, animationend olayı tetiklendiğinde çözülen bir Promise döndürüyoruz. onbeforeremove'dan bir promise döndürdüğümüzde, Mithril.js, promise çözülene kadar bekler ve elemanı yalnızca o zaman kaldırır. Bu durumda, çıkış animasyonunun bitmesini bekler.

Toggler bileşenini bağlayarak hem giriş hem de çıkış animasyonlarının çalıştığını doğrulayabiliriz:

javascript
m.mount(document.body, Toggler);

onbeforeremove kancasının, bir eleman DOM'dan ayrılırken parentNode özelliğini kaybeden eleman üzerinde tetiklendiğine dikkat edin. Bu davranışın amacı, sayfa geçişlerinde olası tüm çıkış animasyonlarının aynı anda çalışmasını engelleyerek daha tutarlı bir kullanıcı deneyimi sağlamaktır. Çıkış animasyonunuz çalışmıyorsa, animasyon kodunuzun çağrıldığından emin olmak için onbeforeremove işleyicisini DOM ağacında mümkün olan en üst seviyeye eklediğinizden emin olun.

Performans ​

Animasyon oluştururken, modern tarayıcılar tarafından donanım ile hızlandırılabilen ve top, left, width ve height özelliklerini canlandırmaktan daha iyi performans sağladıkları için yalnızca opacity ve transform CSS özelliklerini kullanmanız önerilir.

Ayrıca, box-shadow özelliği ve :nth-child gibi seçicilerden kaçınmanız önerilir; çünkü bunlar da kaynak yoğun seçeneklerdir. Bir box-shadow'u canlandırmak istiyorsanız, box-shadow özelliğini bir sözde elemana uygulayıp, o elemanın şeffaflığını animasyonlandırmayı düşünebilirsiniz. Performansı düşürebilecek diğer şeyler arasında büyük veya dinamik olarak ölçeklenmiş resimler ve farklı position değerlerine sahip (örneğin, position: fixed olan bir elemanın üzerinde position: absolute olan bir eleman) örtüşen elemanlar bulunur.

Pager
Önceki sayfaEski Tarayıcılarda ES6+
Sonraki sayfaTest

MIT Lisansı altında yayınlanmıştır.

Copyright (c) 2024 Mithril Contributors

https://mithril.js.org/animation.html

MIT Lisansı altında yayınlanmıştır.

Copyright (c) 2024 Mithril Contributors