Number Count

v1.1.04,1 kB gzipkostenlos

Zahlen zählen hoch, sobald sie ins Bild kommen — mit genau der Schreibweise, die im Designer schon dasteht.

Tutorial-Video
Lässt sich mit KI umsetzen, der Prompt ist vorbereitet
Live-Demo ansehenCloneable holen
Das Prinzip · Warum Number Count

Der Zielwert wird nicht eingestellt, sondern gelesen. Was im Designer als Text steht — 1.234, 1,234, 1'234 oder 1 234, mit „€ “ davor oder „ Mio.“ dahinter — wird zerlegt: die Zahl für die Animation, alles andere als Form, die am Ende wieder genauso dasteht. Deshalb entspricht der Endzustand exakt dem Designer-Text, und ändert sich die Zahl im CMS, ändert sich der Zähler mit.

  1. LesenDer Textinhalt wird geparst: Tausendertrenner, Dezimaltrenner, Prefix und Suffix werden erkannt und bleiben erhalten.
  2. WartenEin IntersectionObserver wartet, bis genug von der Zahl im Bild ist — ab Werk 40 Prozent, auf Wunsch ein eigener Wert. Einmalig, sofern nicht wiederholt werden soll.
  3. ZählenDie Animation läuft über requestAnimationFrame mit easeOutCubic; formatiert wird über Intl.NumberFormat mit der Sprache aus <html lang>.

Dieses <script> in den Custom Code deines Projekts

Einmal pro Projekt genügt, auch wenn du die Lösung auf mehreren Seiten nutzt: Project Settings → Custom Code → Head Code. Das Skript lädt nebenher und hält das Rendern nicht auf; es läuft erst, wenn die Seite steht, und tut nichts, solange kein fpu-Attribut da ist.

<!-- FlowPowerUser · Number Count -->
<script defer src="https://cdn.jsdelivr.net/npm/@flowpoweruser/attributes@1/number-count.js"></script>

Die Zahl markieren

Schreib die Zahl so in den Designer, wie sie am Ende dastehen soll — mit Trennzeichen, mit Prozentzeichen, mit allem, was dazugehört. Dann setz das Attribut darauf. Der Zielwert wird aus genau diesem Text gelesen; ein eigener Wert ist nur nötig, wenn er vom Text abweichen soll.

Auf die Zahlnur Text darin
AttributWertBeschreibung
Schaltet die Lösung für dieses Element ein. Der Zielwert wird aus dem Textinhalt geparst — Tausendertrenner, Dezimaltrenner, Prefix (z. B. „+“, „€ “) und Suffix (z. B. „%“, „ Mio.“) werden erkannt und bleiben erhalten. Pflicht.
Im Navigator
Text Block   fpu-count-element="number"
             Inhalt: 1.250 +

Veröffentlichen und nachsehen

Seite veröffentlichen und so weit scrollen, dass die Zahl ins Bild kommt. Zwei Dinge müssen stimmen: Sie beginnt zu zählen, sobald sie sichtbar ist, und am Ende steht dort wieder genau der Text aus dem Designer — dieselben Trennzeichen, dieselben Nachkommastellen, derselbe Vor- und Nachtext. Bleibt sie stehen, hilft fpu-count-logging="true": das schreibt beim Start eine Zeile in die Browser-Konsole.

OptionalBrauchst du nur, wenn du es brauchst. Aufklappen
OptionalMehrere Zahlen gestaffelt startenStandard: 150 ms Versatz

Stehen mehrere Kennzahlen nebeneinander, sollen sie selten alle gleichzeitig losspringen. Setz das Attribut auf den umgebenden Container: Er startet alle enthaltenen Zähler gestaffelt, sobald er selbst sichtbar wird, und vererbt seine Optionen an die Mitglieder — was du am Container einstellst, gilt für alle Zahlen darin.

Auf den Container

AttributWertStandardBeschreibung
Startet alle enthaltenen number-Zähler gestaffelt, sobald der Container sichtbar wird, und vererbt seine Optionen an die Mitglieder.
150Versatz in Millisekunden zwischen zwei Zählern der Gruppe. Gehört auf das group-Element.
OptionalWerte, Dauer und WiederholungStandard: 0 → Text, 2000 ms

Ohne Angabe zählt die Zahl von 0 auf den Wert, der im Text steht, und braucht dafür zwei Sekunden. Diese vier Attribute setzen jeden Teil davon einzeln. Ist der Startwert größer als der Zielwert, zählt die Zahl herunter statt hoch.

Auf die Zahl oder die Gruppe

an der Gruppe gilt es für alle
AttributWertStandardBeschreibung
Wert aus dem TextZielwert-Override, falls er nicht aus dem Textinhalt kommen soll. Punkt als Dezimaltrenner.
0Startwert. Liegt er über dem Zielwert, wird heruntergezählt.
2000Animationsdauer in Millisekunden.
falseZählt bei jedem Viewport-Eintritt neu. Ohne dieses Attribut läuft die Animation genau einmal.
OptionalWann gezählt wirdStandard: 40 % des Elements

Ohne Angabe beginnt die Zahl zu zählen, sobald 40 Prozent von ihr im Bild sind. Soll das früher oder später passieren, setzt dieses Attribut den Punkt selbst — entweder als Anteil des Elements oder als feste Strecke. Bei „px“, „vh“ und „vw“ zählt, wie viel vom Element zu sehen ist; ist das Element selbst niedriger als der geforderte Wert, genügt es vollständig, damit ein kleiner Zähler nicht auf eine Strecke wartet, die er nie erreichen kann.

Auf die Zahl oder die Gruppe

bei Gruppen zählt der Container
AttributWertStandardBeschreibung
40%Ab wann gezählt wird. „40 %“ und „0.4“ meinen dasselbe: den Anteil des Elements. „120px“, „10vh“ und „10vw“ geben stattdessen an, wie viel vom Element zu sehen sein muss; vh und vw beziehen sich auf das aktuelle Fenster und werden beim Drehen oder Ziehen neu berechnet. Eine Zahl ohne Einheit gilt nur zwischen 0 und 1 — alles darüber ist mehrdeutig und wird mit einem Hinweis in der Konsole abgelehnt.
OptionalTausendertrenner und KonsoleTrenner sonst wie im Text

Der Tausendertrenner kommt normalerweise aus dem Originaltext. Soll er ein anderer sein, setzt dieses Attribut ihn — entweder als Schlüsselwort oder wörtlich als das Zeichen, das dastehen soll.

Auf die Zahl oder die Gruppe

AttributWertStandardBeschreibung
wie im OriginaltextTausendertrenner-Override. „none“ gruppiert gar nicht; „space“, „nbsp“, „thin“ und „apostrophe“ sind Schlüsselwörter. Jeder andere Wert wird wörtlich als Trennzeichen übernommen.
falseSchreibt beim Start eine Zeile in die Browser-Konsole.
OptionalStandards für das ganze Projektdas Attribut gewinnt immer

Wenn jede Zahl im Projekt dieselbe Dauer oder denselben Trenner haben soll, lässt sich das einmal zentral setzen, statt es an jedes Element zu schreiben. Ein Attribut am Element sticht diesen Wert immer.

Vor dem Skript im Head Code
<script>
  window.fpuNumberCountConfig = {
    duration: 2000,
    stagger: 150,
    repeat: false,
    separator: ".",
    threshold: "40%",
    logging: false,
  };
</script>
Mehr Möglichkeiten

Zusätzliche Features

Wer weniger Bewegung eingestellt hat, bekommt keine
Steht im Betriebssystem „Bewegung reduzieren“, wird nicht gezählt: Die Zahl steht sofort auf ihrem Endwert. Der Inhalt ist damit von der ersten Sekunde an vollständig lesbar.
Hohe Elemente werden anders gemessen
Ein Element, das höher ist als der Bildschirmausschnitt, erreicht einen Anteil von 40 Prozent nie — es passt schlicht nicht hinein. Dort entscheidet deshalb der sichtbare Anteil am Fenster statt der Anteil am Element, damit auch große Zahlenblöcke zuverlässig starten.
Nachgeladene CMS-Zähler laufen mit
Die Lösung hört auf das Ereignis „fpu:items-changed“ und initialisiert neu gerenderte Zähler nach. Zahlen, die erst durch Filtern, Sortieren oder Nachladen entstehen, zählen also genauso.
Eigener Code kann andocken
Die laufenden Zähler, ein erneuter Start und das Aufräumen sind von außen erreichbar: instances, init und destroyAll.
Das Element sollte nur Text enthalten
Während der Animation wird der Inhalt über textContent ersetzt. Kind-Elemente innerhalb der Zahl gehen dabei verloren — Vor- und Nachtext gehören deshalb in denselben Textinhalt, nicht in eigene Spans.