Skip to content
Mithril.js 2
Main Navigation ÚtmutatóAPI

magyar

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

magyar

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

Megjelenés

Sidebar Navigation

Első lépések

Telepítés

Egyszerű példa

Források

JSX

ES6+ öreg böngészőkön

Animációk

Tesztelés

Példák

Harmadik féltől való integráció

Útvonalkezelés

Kulcsfogalmak

Virtuális DOM csomópontok

Komponensek

Életciklus-metódusok

Kulcsok

Az automatikus újrarajzolási rendszer

Egyéb

Framework összehasonlítás

Migrálás v1.x-ről

Átállás v0.2.x verzióról

API

Ezen az oldalon

Animációk ​

Technológiai lehetőségek ​

Az animációkat gyakran használják az alkalmazások vizuális gazdagítására. A modern böngészők kiválóan támogatják a CSS animációkat, és számos könyvtár is elérhető, amelyek gyors, JavaScript-alapú animációkat kínálnak. Emellett létezik egy készülő Web API és egy polyfill is, ha a legújabb technológiákkal szeretne kísérletezni.

A Mithril.js nem tartalmaz beépített animációs API-kat, mivel a fent említett megoldások több mint elegendőek a komplex animációk megvalósításához. A Mithril.js viszont biztosít ún. "hook"-okat, amelyek megkönnyítik bizonyos animációs feladatok elvégzését, amelyek hagyományosan nehézkesek lehetnek.

Animáció elem létrehozásakor ​

Egy elem létrehozásakor történő CSS animáció alkalmazása rendkívül egyszerű. Egyszerűen adjon hozzá egy animációt egy CSS osztályhoz a megszokott módon:

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

m.mount(document.body, FancyComponent);

Animáció elem eltávolításakor ​

Az elem eltávolítása előtti animációval az a kihívás, hogy meg kell várnunk az animáció befejeződését, mielőtt az elemet eltávolítanánk a DOM-ból. Szerencsére a Mithril.js rendelkezik az onbeforeremove hook-kal, amely lehetővé teszi számunkra, hogy késleltessük az elem eltávolítását.

Hozzunk létre egy exit animációt, amely az opacity értékét 1-ről 0-ra csökkenti (kifelé halványítás).

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

Most hozzunk létre egy egyszerű komponenst, amely megjeleníti és elrejti az előző szakaszban létrehozott FancyComponent-et:

javascript
var on = true;

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

Ezután módosítsuk a FancyComponent-et úgy, hogy kifelé halványuljon, amikor eltávolítják:

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', 'Hello world');
  },
};

A vnode.dom a komponens gyökér DOM elemére mutat (<div class="fancy">). A classList API-t használjuk itt, hogy hozzáadjunk egy exit osztályt a <div class="fancy"> elemhez.

Ezután visszaadunk egy Promise-t, amely akkor teljesül, amikor az animationend esemény bekövetkezik. Amikor egy Promise-t adunk vissza az onbeforeremove-ból, a Mithril.js megvárja, amíg a Promise teljesül, és csak azután távolítja el az elemet. Ebben az esetben megvárja, amíg a kilépési animáció befejeződik.

Ellenőrizhetjük, hogy a belépési és a kilépési animációk megfelelően működnek-e a Toggler komponens csatlakoztatásával:

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

Fontos megjegyezni, hogy az onbeforeremove hook csak azon az elemen fut le, amely elveszíti a parentNode-ját, amikor egy elemet eltávolítanak a DOM-ból. Ez a viselkedés szándékos, és célja, hogy elkerüljük a zavaró felhasználói élményt, ahol az oldal minden elképzelhető kilépési animációja lefutna egy útvonalváltáskor. Ha a kilépési animáció nem fut le, győződjön meg róla, hogy az onbeforeremove kezelőt olyan magasan csatolja a fához, ahol ez ésszerű, hogy biztosítsa az animációs kód meghívását.

Teljesítmény ​

Animációk létrehozásakor ajánlott csak az opacity és a transform CSS tulajdonságokat használni, mivel ezeket a modern böngészők hardveresen gyorsíthatják, ami jobb teljesítményt eredményez, mint a top, a left, a width és a height animálása.

Ajánlott továbbá elkerülni a box-shadow tulajdonságot és az olyan szelektortípusokat, mint a :nth-child, mivel ezek is erőforrás-igényesek lehetnek. Ha egy box-shadow-t szeretne animálni, fontolja meg, hogy a box-shadow tulajdonságot egy pszeudo elemre helyezi, és ehelyett az elem átlátszóságát animálja. További erőforrás-igényes megoldások közé tartoznak a nagy vagy dinamikusan méretezett képek és a különböző position értékekkel rendelkező átfedő elemek (pl. egy abszolút pozicionált elem egy fix elem felett).

Pager
Előző oldalES6+ öreg böngészőkön
Következő oldalTesztelés

A MIT licenc alapján kiadva.

Copyright (c) 2024 Mithril Contributors

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

A MIT licenc alapján kiadva.

Copyright (c) 2024 Mithril Contributors