Animation im Web: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
 
(3 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 2: Zeile 2:
 
In früheren Zeiten war die Standardantwort für "bewegte" Webseiten ganz einfach Flash. Heutzutage gibt es viele Lösungen um Animationen auf eine Webseite zu bringen. Dieser Artikel soll eine kleine Übersicht bringen.
 
In früheren Zeiten war die Standardantwort für "bewegte" Webseiten ganz einfach Flash. Heutzutage gibt es viele Lösungen um Animationen auf eine Webseite zu bringen. Dieser Artikel soll eine kleine Übersicht bringen.
  
Stichworte: Anime.js, Gsap, CSS Transform, CSS Keyframes, Snap
+
Stichworte: Anime.js, GSAP, CSS Transform, CSS Keyframes, Snap, Waypoints, Lottie, ScrollMagic
  
 
== Links ==
 
== Links ==
 
  Siehe auch in den Sections
 
  Siehe auch in den Sections
 +
[[GSAP]]
 
  [[Scroll-Snap]]
 
  [[Scroll-Snap]]
 
  [[Anime.js]]
 
  [[Anime.js]]
 +
http://imakewebthings.com/waypoints/guides/getting-started/
 +
[[Lottie]]
  
 
== Überblick ==
 
== Überblick ==
 
=== GSAP & ScrollMagic ===
 
=== GSAP & ScrollMagic ===
 +
ScrollMagic ist obsolet es gibt bei GSAP ein eigenes Plugin - ScrollTrigger
 
  [[GSAP]]
 
  [[GSAP]]
 
Gehört zu den Standardlösungen. GSAP - Greensock Animation Plattform bietet JavaScript Tools für Timeline-basierte Animationen. Ergänzend kann ScrollMagic die Steuerung der Timelines basierend auf der Skrollposition der Webseite steuern.
 
Gehört zu den Standardlösungen. GSAP - Greensock Animation Plattform bietet JavaScript Tools für Timeline-basierte Animationen. Ergänzend kann ScrollMagic die Steuerung der Timelines basierend auf der Skrollposition der Webseite steuern.

Aktuelle Version vom 25. April 2024, 10:04 Uhr

Quickstart[Bearbeiten]

In früheren Zeiten war die Standardantwort für "bewegte" Webseiten ganz einfach Flash. Heutzutage gibt es viele Lösungen um Animationen auf eine Webseite zu bringen. Dieser Artikel soll eine kleine Übersicht bringen.

Stichworte: Anime.js, GSAP, CSS Transform, CSS Keyframes, Snap, Waypoints, Lottie, ScrollMagic

Links[Bearbeiten]

Siehe auch in den Sections
GSAP
Scroll-Snap
Anime.js
http://imakewebthings.com/waypoints/guides/getting-started/
Lottie

Überblick[Bearbeiten]

GSAP & ScrollMagic[Bearbeiten]

ScrollMagic ist obsolet es gibt bei GSAP ein eigenes Plugin - ScrollTrigger

GSAP

Gehört zu den Standardlösungen. GSAP - Greensock Animation Plattform bietet JavaScript Tools für Timeline-basierte Animationen. Ergänzend kann ScrollMagic die Steuerung der Timelines basierend auf der Skrollposition der Webseite steuern.

Vorteil:

  • Alle DOM Elemente können animiert werden. Nicht nur in der Bewegung sondern auch in der Farbe, Sichtbarkeit...
  • Gute Performance
  • Mit ScrollMagic einfaches Steuern beim Scrolling inklusive einfaches Pinning (fixieren während der Animation)

Nachteil:

  • Skriptlastig, wobei es nicht so komplex ist wie bei anderen Lösungen.

Vector + AfterFX + Bodymovin + Lottie[Bearbeiten]

https://www.youtube.com/watch?v=i6qfQ8QDOfs&feature=emb_rel_end

Ein weiterer vielversprechender Workflow.

  • Vektordateien erstellen
  • In AfterFX importieren. Hier gibt es mehrere Möglichkeiten. Illustrator Dateine kann man direkt importieren, für Sketch gibt es ein Importtool, das auch die Layer mitnimmt. More to check out...
  • Animation in AfterFX erstellen
  • Mit dem AfterFX Bodymovin Plugin exportierst du die Animation als JSON File.
  • Lottie kann die erstellt Datei rendern. Die Lottie Library gibt es für den Browser, aber auch für iOS und Android - dort werden die Dateien Nativ gerendert.
  • Lottie Animationen können auch mit GSAP gesteuert werden.
https://greensock.com/forums/topic/18343-timelinemax-scrollmagic-lottie-web-bodymoving-is-it-possible-is-it-necessary/
https://www.youtube.com/watch?time_continue=308&v=HeY9qGUT3zQ&feature=emb_logo

Vorteil:

  • Einfache Erstellung mit AfterFX
  • Natives Rendern in Apps möglich -> gute Performance

Nachteil:

  • Keine DOM Elemente
  • Player nicht so frei positionierbar.

Only CSS[Bearbeiten]

CSS Transitions
CSS Animation

CSS3 stellt einfache Möglichkeiten zur Verfügung Elemente (auch SVG Pfade) zu animieren. Vorteil:

  • Ohne JavaScript
  • Für einfache Animationen einfach zu realisieren
  • Performant wenn Properties verwendet werden, die der Browser nativ rechnen kann (z.B. alle transform Eigenschaften)

Nachteil:

  • Komplexe Animationen umständlich

JQuery - Animation

Animation mit CSS only[Bearbeiten]

CSS Transitions
CSS Animation

Animation mit JavaScript,CSS SVG und Canvas[Bearbeiten]

Cooler Triangles Tiles Effekt[Bearbeiten]

http://codepen.io/mistic100/pen/JobPLK (2016-12)

<div id="tiles"></div>
<p>Enhancement of my original <a href="http://codepen.io/mistic100/pen/GFHkm">Colorful Tiles</a> with truly random animation.</p>
<p>At the end of each cycle (49 steps) a new Perlin noise map is generated.</p>


body { background:#111; }
#tiles { margin:0 auto; }
p { max-width:680px; margin:10px auto; color:white; font:16px "Calibri", sans-serif; }
a { color:#3E7289; }


(function(){
    if (!SVG.supported) {
        alert('SVG not supported !');
        return;
    }
    
    // parameters
    var size = { x: 680, y: 400, tile: 40 },
        speed = 50,
        tile_nb = { x: Math.ceil(size.x/size.tile)+1, y: Math.ceil(size.y/size.tile)+1 },
        colors = ["#ED1156", "#ED194E", "#ED2247", "#ED2B3F", "#EE3438", "#EE3D31", "#EE4529", "#EF4E22", "#EF571A", "#EF6013", "#F0690C", "#E8720E", "#E17B10", "#D98512", "#D28E14", "#CB9816", "#C3A118", "#BCAA1A", "#B4B41C", "#ADBD1E", "#A6C721", "#96C62F", "#87C53E", "#78C44D", "#69C35C", "#5AC26B", "#4AC17A", "#3BC089", "#2CBF98", "#1DBEA7", "#0EBDB6", "#0EBAB0", "#0EB8AA", "#0EB5A4", "#0EB39E", "#0EB098", "#0EAE92", "#0EAB8C", "#0EA986", "#0EA680", "#0EA47B", "#269376", "#3F8372", "#58736E", "#71626A", "#895266", "#A24262", "#BB315E", "#D4215A"],
        objects = [],
        values = [],
        nb_colors = colors.length;
    
    // function to generate simplex noise map
    function generateValues(add) {
        var values = [], foo,
            simplex = new SimplexNoise();
        
        for (var l=0; l<tile_nb.y; l++) {
            for (var c=0; c<tile_nb.x; c++) {
                foo = Math.round((simplex.noise(c/10, l/10)+1) / 2 * nb_colors) + add;
                values.push(foo, foo+1, foo+2, foo+3);
            }
        }
        
        return values;
    }

    // init canvas
    var container = document.getElementById('tiles');
    container.style.width = size.x+'px';
    container.style.height = size.y+'px';

    var paper = SVG(container).size(size.x, size.y),
        pos, cmd,
        counter = 0;

    // draw tiles
    for (var l=0; l<tile_nb.y; l++) {
        for (var c=0; c<tile_nb.x; c++) {
            pos = { x: c*size.tile, y: l*size.tile };
            
            // tile 1
            cmd = pos.x +','+ pos.y +' '+ (pos.x+size.tile) +','+ pos.y +' '+ (pos.x+size.tile/2) +','+ (pos.y+size.tile/2);
            objects.push(paper.polygon(cmd, true));
            // tile 2
            cmd = (pos.x+size.tile) +','+ (pos.y+size.tile) +' '+ pos.x +','+ (pos.y+size.tile) +' '+ (pos.x+size.tile/2) +','+ (pos.y+size.tile/2);
            objects.push(paper.polygon(cmd, true));
            // tile 3
            cmd = pos.x +','+ pos.y +' '+ (pos.x+size.tile/2) +','+ (pos.y+size.tile/2) +' '+ (pos.x-size.tile/2) +','+ (pos.y+size.tile/2);
            objects.push(paper.polygon(cmd, true));
            // tile 4
            cmd = pos.x +','+ (pos.y+size.tile) +' '+ (pos.x+size.tile/2) +','+ (pos.y+size.tile/2) +' '+ (pos.x-size.tile/2) +','+ (pos.y+size.tile/2);
            objects.push(paper.polygon(cmd, true));
        }
    }

    // cycle colors
    values[0] = generateValues(0);
    values[1] = generateValues(nb_colors);
    
    setInterval(function() {
        var idx;
        for (var i=0, l=objects.length; i<l; i++) {
            idx = Math.round((values[1][i]-values[0][i]) * counter/(nb_colors-1) + values[0][i]);
            if (idx >= nb_colors) idx = idx%nb_colors;
            objects[i].fill(colors[idx]);
        }
        
        counter++;
        if (counter == nb_colors) {
            counter = 1;
            values[0] = values[1].map(function(v) { return v-nb_colors; });
            values[1] = generateValues(nb_colors);
        }
    }, speed);

    // bug in svg.js
    var temp = document.getElementById('SvgjsSvg1002');
    temp.parentNode.removeChild(temp);
}());