laufende CSS-Figur

Aus dem Englischen übersetzt

running css character

1

1

CREDIT : @kouryde_i

wenn du keinen Credit gibst, kriege ich dich




<!-- =========================================================

LAUFENDE SEITENPUPPE

HINWEIS: Du brauchst dafür 4 Lauf-Sprites. Also vier verschiedene Bilder deiner Figur beim Gehen.

========================================================= -->

<div class="pagedoll-runner" id="pagedoll-runner">

<!--

Die vier Lauf-Frames werden alle auf einmal geladen. CSS übernimmt die Animation, indem es zwischen ihnen überblendet.

-->

<img

src="your_image_link"

alt=""

class="pagedoll-frame pagedoll-frame-1"

draggable="false"

>

<img

src="your_image_link"

alt=""

class="pagedoll-frame pagedoll-frame-2"

draggable="false"

>

<img

src="your_image_link"

alt=""

class="pagedoll-frame pagedoll-frame-3"

draggable="false"

>

<img

src="your_image_link"

alt=""

class="pagedoll-frame pagedoll-frame-4"

draggable="false"

>

<!-- Besiegt-Sprite -->

<img

src="your_image_link"

alt=""

class="pagedoll-defeat"

draggable="false"

>

</div>

<style>

/* =========================================================

HAUPT-SEITENPUPPE

========================================================= */

.pagedoll-runner {

/* Größe */

width: 120px;

height: 120px;

/* Position */

position: fixed;

/*

Startet komplett außerhalb der LINKEN Seite des Bildschirms.

*/

left: -140px;

bottom: 12px;

/*

SEHR hohe Stapelreihenfolge.

Manches vorhandene CSS nutzt Werte wie 3000 und 20000, daher ist dieser absichtlich viel höher.

*/

: 2147483647 !important;

/*

Erzeugt einen eigenen Stapelkontext.

*/

isolation: isolate;

/*

Soll nicht vom Layout deiner Profil-Boxen beeinflusst werden.

*/

margin: 0 !important;

padding: 0 !important;

/*

Die gesamte Puppe bewegt sich über den Viewport.

*/

animation:

pagedoll-cross-screen

8s

linear

infinite;

/*

Stell sicher, dass sie tatsächlich Klicks empfangen kann.

*/

pointer-events: auto;

cursor: pointer;

/*

Verhindert seltsame Text-/Bildauswahl.

*/

user-select: none;

-webkit-user-select: none;

/*

Erlaube ihr nicht, eine horizontale Scrollleiste zu erzeugen.

*/

overflow: visible;

}

/* =========================================================

ALLE SPRITES

========================================================= */

.pagedoll-runner .pagedoll-frame,

.pagedoll-runner .pagedoll-defeat {

position: absolute !important;

left: 0 !important;

top: 0 !important;

width: 120px !important;

height: 120px !important;

/*

Das verhindert, dass das normale Bild-Styling von Janitor die Sprites verzerrt/zuschneidet.

*/

object-fit: contain !important;

/*

WICHTIG:

alle Sprites liegen direkt übereinander.

*/

margin: 0 !important;

padding: 0 !important;

border: 0 !important;

outline: none !important;

box-shadow: none !important;

/*

Sie sollten den Klick NICHT abfangen.

Das Elternelement .pagedoll-runner empfängt ihn.

*/

pointer-events: none;

/*

Verhindert das Ziehen des Bildes.

*/

user-select: none;

-webkit-user-drag: none;

}

/* =========================================================

LAUF-SPRITE-FRAMES

========================================================= */

/*

Es ist immer nur EIN Frame sichtbar.

Die Animation dauert 0,64 Sekunden:

1 → 2 → 3 → 4 → wiederholen

Das sind ungefähr 6,25 Frames pro Sekunde.

*/

.pagedoll-frame-1 {

opacity: 1;

animation:

pagedoll-frame-1

0.64s

steps(1)

infinite;

}

.pagedoll-frame-2 {

opacity: 0;

animation:

pagedoll-frame-2

0.64s

steps(1)

infinite;

}

.pagedoll-frame-3 {

opacity: 0;

animation:

pagedoll-frame-3

0.64s

steps(1)

infinite;

}

.pagedoll-frame-4 {

opacity: 0;

animation:

pagedoll-frame-4

0.64s

steps(1)

infinite;

}

/* FRAME 1 */

@keyframes pagedoll-frame-1 {

0%,

24.999% {

opacity: 1;

}

25%,

100% {

opacity: 0;

}

}

/* FRAME 2 */

@keyframes pagedoll-frame-2 {

0%,

24.999% {

opacity: 0;

}

25%,

49.999% {

opacity: 1;

}

50%,

100% {

opacity: 0;

}

}

/* FRAME 3 */

@keyframes pagedoll-frame-3 {

0%,

49.999% {

opacity: 0;

}

50%,

74.999% {

opacity: 1;

}

75%,

100% {

opacity: 0;

}

}

/* FRAME 4 */

@keyframes pagedoll-frame-4 {

0%,

74.999% {

opacity: 0;

}

75%,

99.999% {

opacity: 1;

}

100% {

opacity: 0;

}

}

/* =========================================================

BEWEGUNG ÜBER DEN GESAMTEN BILDSCHIRM

========================================================= */

@keyframes pagedoll-cross-screen {

/*

Startet außerhalb des linken Randes.

*/

0% {

left: -140px;

}

/*

Läuft den ganzen Weg über den Bildschirm.

*/

100% {

left: calc(100vw + 140px);

}

}

/* =========================================================

BESIEGT-SPRITE

========================================================= */

.pagedoll-defeat {

/*

Versteckt während des Laufens.

*/

opacity: 0 !important;

/*

Wenn aktiviert, über die Lauf-Frames legen.

*/

: 20 !important;

}

/* =========================================================

KLICK-/TIPP-ZUSTAND

========================================================= */

/*

Der clevere Trick: :focus-within wird aktiviert, wenn die Seitenpuppe angetippt/angeklickt wird. Das Elternelement hört auf zu laufen. Die vier Lauf-Sprites verschwinden. Das Besiegt-Sprite erscheint. (das funktioniert aus irgendeinem Grund nicht, also läuft deine Figur einfach in einer endlosen Schleife)

*/

.pagedoll-runner:focus-within {

animation-play-state: paused;

cursor: default;

}

/* Lauf-Sprites nach dem Klick ausblenden */

.pagedoll-runner:focus-within .pagedoll-frame {

animation-play-state: paused;

opacity: 0 !important;

}

/* Besiegt-Sprite anzeigen */

.pagedoll-runner:focus-within .pagedoll-defeat {

opacity: 1 !important;

}

/* =========================================================

KLEINER BESIEGT-EFFEKT

========================================================= */

.pagedoll-runner:focus-within {

animation:

pagedoll-defeat-stop

0.35s

ease-out

forwards;

}

@keyframes pagedoll-defeat-stop {

0% {

transform:

scale(1)

rotate(0deg);

}

35% {

transform:

scale(1.12)

rotate(-8deg);

}

65% {

transform:

scale(0.95)

rotate(6deg);

}

100% {

transform:

scale(1)

rotate(0deg);

}

}

/* =========================================================

DESKTOP

========================================================= */

@media screen and (min-width: 769px) {

.pagedoll-runner {

width: 140px;

height: 140px;

bottom: 15px;

}

.pagedoll-runner .pagedoll-frame,

.pagedoll-runner .pagedoll-defeat {

width: 140px !important;

height: 140px !important;

}

}

/* =========================================================

MOBIL

========================================================= */

@media screen and (max-width: 768px) {

.pagedoll-runner {

width: 90px;

height: 90px;

bottom: 8px;

}

.pagedoll-runner .pagedoll-frame,

.pagedoll-runner .pagedoll-defeat {

width: 90px !important;

height: 90px !important;

}

}

/* =========================================================

BARRIEREFREIHEIT: BEWEGUNG REDUZIEREN

========================================================= */

@media (prefers-reduced-motion: reduce) {

.pagedoll-runner {

animation-duration: 12s;

}

.pagedoll-runner .pagedoll-frame {

animation-duration: 1.2s;

}

}

</style>




habt Geduld mit mir, ich finde noch heraus, wie ich die Besiegt-Animation reparieren kann

Erstellt 19 sept.

Aktualisiert 19 sept.

Veröffentlicht 19 sept.

  • Unbegrenzt

Veröffentlichte Chats