Anwendung von CSS3-Animationseffekten in Aktivitätsseiten

Anwendung von CSS3-Animationseffekten in Aktivitätsseiten

Hintergrund

Ehe wir uns versehen, neigt sich ein arbeitsreiches Jahr dem Ende zu und es ist Zeit für das jährliche Event. Um die festliche Atmosphäre zu vermitteln, sind dynamische Effekte auf der Eventseite unerlässlich.

Zunächst das Effektbild:

1. Gesamtanalyse

Auf dem Bild können wir sehen, dass die wichtigsten dynamischen Effekte dynamische Anzeigepfeile und fallende Schneeeffekte sind. Es ist nicht ratsam, faul zu sein und dieses Effektbild direkt als Hintergrund zu verwenden, da die Größe des Bildes mehr als 3 MB beträgt, was eine Katastrophe für den Server und die Benutzererfahrung ist. Da es sich um eine aktive Seite handelt, ist die Anzahl der Besuche natürlich unvermeidlich. Unter der Bedingung hoher Parallelität ist der Server natürlich überlastet, und wir bedauern auch den Datenverkehr des Benutzers und die Zeit, die der Benutzer auf eine Antwort wartet. Als Person, die nach Perfektion strebt, besteht unser Grundsatz darin, GIF entschieden nicht für Effekte zu verwenden, die durch ein Programm erreicht werden können, und so viele Ressourcen wie möglich zu sparen.

2. Dynamische Anzeigepfeile

Aus Sicht der Programmimplementierung müssen wir zunächst die Änderungspunkte kapseln und die Änderungen von den Konstanten trennen. Die fünf Ebenen in der Abbildung sind im Allgemeinen gleich. Jede Ebene hat eine Basis und einen Pfeil. Nachdem die Ebenen gekapselt sind, werden Daten verwendet, um die Position jeder Ebene zu steuern, und der Pfeil zeigt die Richtung an.

Die relevanten Daten sind wie folgt:

[
    {
        Zustand: 0,
        links: 9,
        oben: -2,
        Richtung: { rotateZ: 290, Farbe: "#d26754" }
    },
    {
        Zustand: 0,
        links: 66,
        oben: 10,
        Richtung: { rotateZ: 24, Farbe: "#f58351" }
    },
    {
        Zustand: 0,
        links: 18,
        oben: 20,
        Richtung: { rotateZ: 30, Farbe: "#f78351" }
    },
    {
        Zustand: 0,
        links: -2,
        oben: 36,5,
        Richtung: { rotateZ: 295, Farbe: "#e19d47" }
    },
    {
        Zustand: 0,
        links: 52,
        oben: 49,5,
        Richtung: { rotateZ: 293, Farbe: "#e19d47" }
    }
]

1. Dynamische Effektanalyse

Nach sorgfältiger Betrachtung der Renderings stellt man fest, dass der Gesamteffekt eine 3D-Perspektive ist. Die Perspektive ist kein vertikaler Blick nach unten, sondern ein Blick nach unten in einem 45°-Winkel. Das erste, was mir in den Sinn kommt, ist die leistungsstarke 3D-Rotation von CSS3. Der Pfeileffekt kann in Laufspur + Pfeillaufeffekt unterteilt werden. Auf diese Weise müssen Sie lediglich eine 3D-Perspektive der Spur erstellen und die Bewegung des Pfeils entlang der äußeren Spur wiederholen.

2. Konkrete Umsetzung

<div Klasse="Artikel" flex="Haupt:Mitte Kreuz:Mitte"
:Stil="{links:item.left+'%',top:item.top+'%'}"
v-for="Artikel in Artikeln" @click="showReceive(Artikel)">
    <div Klasse="unten" flex="main:center cross:center">
        <div class="direction" flex="dir:top" :style="{transform:`rotateX(34deg) rotateY(0deg) rotateZ(${item.direction.rotateZ}deg)`}">
            <div Klasse="halb"></div>
            <div Klasse="Halbkettenfahrzeug">
                <div Klasse="Pfeil"
                :style="{transform: `drehen(${item.direction.rotate}deg`,
                rechts: `${item.direction.right}px`,
                'Rahmenfarbe': `${item.direction.color} transparent transparent`
                }"></div>
            </div>
        </div>
    </div>
</div>
  .Richtung {
    Position: absolut;
    Breite: 20px;
    Höhe: 260%;
    .halb {
      biegen: 1;
    }
    .Schiene {
      Position: relativ;
      //Rand oben: 90px;
      Rand oben: 2em;
      .Pfeil {
        Position: absolut;
        Breite: 0;
        Höhe: 0;
        Rand: 10px durchgezogen;
        Rahmenfarbe: rot transparent transparent;
        Animation: dynamicArrow 3000 ms unendlich linear;
      }
    }
  }
/* //Dynamischer Pfeil*/
@keyframes dynamischer Pfeil {
  0% {
    Deckkraft: 1;
    unten: 100 %;
  }
  70 % {
    Deckkraft: 1;
  }
  90 % {
    Deckkraft: 0,1;
    unten: -20px;
  }
  100 % {
    Deckkraft: 0;
  }
}

3. Schnee fällt überall am Himmel

Wenn Sie das Effektbild genau betrachten, werden Sie feststellen, dass die Schneeflocken groß und klein sind, sich mit unterschiedlicher Geschwindigkeit bewegen, nah und fern sind und helle und dunkle Farben haben. Die Gesamtbewegungsrichtung der Schneeflocken ist von oben nach unten und von links nach rechts, und sie fallen sehr gleichmäßig.

1. Umsetzungsideen

Flatterspur mit Schneeflocken + Flattereffekt mit Schneeflocken. Neigen Sie die Spur in einem bestimmten Winkel und kacheln Sie dann den gesamten Bildschirm. Verwenden Sie Daten, um Position, Ebene und Größe der Schneeflocken in der Spur, Laufverzögerung, Laufgeschwindigkeit und Farbtiefe jeder Spur zu steuern. Um den Effekt intuitiver zu sehen, stellen Sie die Hintergrundfarbe der Spur wie unten gezeigt ein:

2. Konkrete Umsetzung

<div Klasse="Schnee">
  <div class="s_track" :style="{transform:`rotate(45deg) translate(${snow.deviation}px,${-snow.deviation}px)`,'z-index':snow.zindex}" v-for="Schnee in Schnee">
      <img class="snow" src="/static/original/img/DoubleDenierActivies/cbp_snow.png" :style="{opacity:snow.opacity,animation: `dynamicSnow ${snow.speed}ms ${snow.delay}ms unendlich linear`,width:snow.size*1.14+'px',height:snow.size+'px'}"/>
  </div>
</div>
.s_track {
  Position: absolut;
  Breite: 220%;
  // Höhe: 10px;
  oben: -10px;
  Transform-Ursprung: 0 0 0;
  .Schnee {
    Sichtbarkeit: versteckt;
    Position: absolut;
    Z-Index: 2;
    Animation: dynamischer Schnee, 2000 ms, unendlich linear;
  }
}
/* //Schneeflocke*/
@keyframes dynamicSnow {
  0% {
    Sichtbarkeit: sichtbar;
    oben: 0;
    links: 0;
    transformieren: drehen(0);
  }
  100 % {
    Sichtbarkeit: sichtbar;
    oben: 100 %;
    links: 100 %;
    transformieren: drehen (360 Grad);
  }
}
lass schneit = [],
  Gibt den Wert für die Anzahl der Zeichen an, die in der ersten Zeile des Blocks stehen.
für (lass i = 0; i < initCount; i++) {
  sei Einheit = i - 8,
    Geschwindigkeit = i > 3 ? i % 3 : i,
    Größe = 0;
  Geschwindigkeit++;
  wenn (i % 5 == 0) {
    Größe = 10;
  } sonst wenn (i % 8 == 0) {
    Größe = 20;
  } anders {
    Größe = Math.random() * 10;
  }
  schneit.push({
    Abweichung: Einheit * 40, //Positionsverzögerung: Math.random() * 1000, //Verzögerungsgeschwindigkeit: Geschwindigkeit * 3000, //Geschwindigkeitsopazität: Geschwindigkeit / 4,
    Größe: Größe,
    zindex: Größe >= 10 ? 4 : 0
  });
}
lass snows2 = [];
snows.forEach(f => {
  snows2.push({
    ...F,
    Abweichung: schneit[parseInt(Math.random() * initCount)].Abweichung - 10,
    Verzögerung: f.delay + 1000 //Verzögerung });
});
lass snows3 = [];
snows.forEach(f => {
  snows3.push({
    ...F,
    Abweichung: schneit[parseInt(Math.random() * initCount)].Abweichung - 20,
    Verzögerung: f.delay + 2000 //Verzögerung });
});
schneit = schneit.concat(schneit2);
schneit = schneit.concat(schneit3);
snows.sort((a, b) => a.Abweichung - b.Abweichung);
this.snows = schneit;

IV. Fazit

Als Frontend-Entwickler müssen Sie die Renderings so weit wie möglich wiederherstellen. Während Sie den Wiederherstellungsgrad verfolgen, müssen Sie auch Leistung und Benutzererfahrung berücksichtigen, um die Seite sowohl schön als auch so leicht und prägnant wie möglich zu gestalten.

Oben ist die vom Editor eingeführte Anwendung von CSS3-Animationseffekten auf Aktivitätsseiten. Ich hoffe, es wird allen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!
Wenn Sie diesen Artikel hilfreich finden, können Sie ihn gerne abdrucken und dabei bitte die Quelle angeben. Vielen Dank!

<<:  Detaillierte Analyse dieser Richtung in JavaScript und wie die Richtung geändert werden kann

>>:  Implementierung von Zehntausenden gleichzeitigen Verbindungen auf einer einzigen Maschine mit nginx+lua

Artikel empfehlen

Erfahren Sie, wie Sie mit Webpack TypeScript-Code verpacken und kompilieren

TypeScript-Bündelung Webpack-Integration Normaler...

Schritte zum Anpassen des Symbols in Vue

ant-design-vue passt die Verwendung von Ali Iconf...

JavaScript realisiert Lupen-Spezialeffekte

Der zu erzielende Effekt: Wenn die Maus auf das k...

Detaillierte Erklärung langsamer MySQL-Abfragen

Informationen zu MySQL-Vorgängen abfragen Status ...

Detailliertes Tutorial zum Aufbau eines lokalen Ideenaktivierungsservers

Vorwort Der Blogger verwendet die Idea IDE. Da di...

Implementierung von React-Loop-Daten (Liste)

Lassen Sie uns zunächst die Daten simulieren, die...

Detaillierte Erklärung zum Problem der CSS-Klassennamen

Die folgenden CSS-Klassennamen, die mit einer Zah...

Eine kurze Erläuterung der Schriftarteinstellungen in Webseiten

Das Festlegen der Schriftart für die gesamte Site...

Beschreiben Sie kurz die vier Transaktionsisolationsebenen von MySql

Isolationsstufe: Isolation ist komplizierter als ...

Detaillierte Erklärung des Unterschieds zwischen Vue-Lebenszyklus

Lebenszyklusklassifizierung Jede Komponente von V...

MySQL Serie 12 Backup und Wiederherstellung

Inhaltsverzeichnis Tutorial-Reihe 1. Beschreibung...

So erstellen Sie PHP7 mit einem benutzerdefinierten Docker-Image

Führen Sie zunächst eine einfache Docker-Installa...

Zusammenfassung zum horizontal scrollenden Website-Design

Horizontales Scrollen ist nicht in allen Situation...

Detailliertes Beispiel der Sortierfunktion field() in MySQL

Vorwort In unserem täglichen Entwicklungsprozess ...

So begrenzen Sie den Wertebereich von Objektschlüsseln in TypeScript

Wenn wir TypeScript verwenden, möchten wir das vo...