Hintergrund Die am häufigsten verwendete Komponente bei Visualisierungsprojekten für große Bildschirme ist die digitale Komponente. Um eine Änderung der Daten anzuzeigen und den visuellen Effekt zu verbessern, muss der Zahl ein Scroll-Effekt hinzugefügt werden, um eine Scroll-Animation zu erzielen, die allmählich von einer Zahl zur nächsten ansteigt. Zunächst eine Mindmap: Erzielen Sie einen ähnlichen Effekt wie mit einem Scrollrad, wobei der Container fixiert ist und die Zahlen nach oben scrollen Listen Sie zunächst alle möglichen Werte auf, um eine vertikale Liste zu bilden, fixieren Sie dann einen Container und ändern Sie den Offsetwert der Zahl mit konstanter Geschwindigkeit. Im Folgenden finden Sie eine Einführung in die Implementierung dieser Lösung. Es gibt zehn Elementwerte von 0 bis 9, und jede Zahl belegt 10 % der vertikalen Liste, sodass die vertikalen Versatzwerte 0 % —> -90 % betragen erreichen: <ul> <li> <span>0123456789</span> </li> </ul> ul{ Rand oben: 200px; } ul li{ Rand: 0 automatisch; Breite: 20px; Höhe: 30px; Textausrichtung: zentriert; Rand: 2px durchgezogen rgba(221,221,221,1); Rahmenradius: 4px; } ul li span{ Position: absolut; Farbe: #fff; oben: 30%; links: 50%; transformieren: übersetzen(-50%,0); Übergang: Transformation 500 ms, leichtes Ein- und Aussteigen; Schreibmodus: vertikal-rl; Textausrichtung: aufrecht; Buchstabenabstand: 17px; } let spanDom = document.querySelector('span') lass start = 0 setzeIntervall(() => { start++ wenn(start>9){ Start = 0 } spanDom.style.transform = `übersetzen(-50%,-${start*10}%)` }, 1000) Es gibt ein Problem mit dem obigen Code. Wenn wir von 9 auf 0 gehen, geht der Container-Offset direkt von -90 % auf 0 %. Aufgrund der festen Übergangsanimationszeit kommt es jedoch zu einem Scrollen in die entgegengesetzte Richtung. Um dieses Problem zu lösen, können Sie auf die Idee des nahtlosen Scrollens zurückgreifen.
<ul> <li> <span>01234567890</span> </li> </ul> let spanDom = document.querySelector('span') lass start = 0 var Timer = setInterval(fn, 1000); Funktion fn() { start++ Intervall löschen(Timer) Timer = Intervall festlegen(fn,start >10 ? 0 : 1000); wenn(start>10){ spanDom.style.transition = „keine“ Start = 0 }anders{ spanDom.style.transition = `Transformation 500 ms, Ein-Aus-Phase` } spanDom.style.transform = `übersetzen(-50%,-${start/11*100}%)` } Verwenden von zwei Elementen zum ScrollenSchauen Sie sich den Effekt der Animation genau an. Tatsächlich gibt es im Ansichtsfenster nur zwei Elemente, eines ist der vorherige Wert und das andere ist der aktuelle Wert. Der Scroll-Offset-Wert muss nur auf „translateY(-100%)“ eingestellt werden. Konkrete Ideen:
Nachfolgend sehen Sie die angepasste Codestruktur: <div Klassenname={styles.slider}> {[vorherige, aktuelle].map((Element, Index) => ( <span key={index} className={`${styles['slider-text']} ${abspielen && styles['slider-ani']} ${(prev === 0 && cur === 0 && index ===0) && styles['slider-hide']}`}> {Artikel} </span> ))} </div> const { Wert} = Eigenschaften const [vorherige, setzeVorherige] = useState(0) const [aktuell, gesetzter Status] = useState(0) const [spielen, spielen einstellen] = useState(false) const play = (vorher, aktuell) => { setPrev(vorher) setCur(aktuell) setzeWiedergeben(false) setzeTimeout(() => { setzeWiedergeben(true) }, 20) } useEffect(() => { wenn (!Zahl.istNaN(Wert)) { abspielen(aktuell, Wert) } anders { setPrev(Wert) setCur(Wert) } }, [Wert]) .Schieberegler { Anzeige: Flex; Flex-Richtung: Spalte; Höhe: 36px; oberer Rand: 24 %; Überlauf: versteckt; Textausrichtung: links; } .slider-text { Anzeige: Block; Höhe: 100%; transformieren: übersetzenY(0%); } .slider-ani { transformieren: verschiebeY(-100%); Übergang: Transformation in 1 Sekunde; } .slider-hide { Deckkraft: 0; } Eine digitale Komponente, die das Aufwärtsscrollen mehrerer Scrollräder implementiert Verwenden Sie die requestAnimationFrame()-API von H5, um einen allmählich zunehmenden Animationseffekt zu erzielen Implementieren Sie eine Laufanimation einer Zahl, die schrittweise ansteigt und innerhalb einer bestimmten Zeit abgeschlossen sein muss. Um flüssige Animationseffekte zu erzielen, muss der Elementstatus in einer bestimmten Häufigkeit aktualisiert werden. JS-Animation wird durch kontinuierliches Rendern/Zeichnen von Elementen in einem sehr kurzen Zeitraum erreicht, daher war der Timer schon immer die Kerntechnologie der Javascript-Animation. Der Schlüssel ist das Aktualisierungsintervall. Die Aktualisierungszeit muss so kurz wie möglich sein, damit der Animationseffekt flüssiger erscheint und nicht hängen bleibt. Gleichzeitig darf das Aktualisierungsintervall nicht zu kurz sein, um sicherzustellen, dass der Browser die Animation rendern kann. Timer-Vergleich
RequestAnimationFrame implementiert Scroll-AnimationDie Animation startet. Die Startzeit der Animation wird aufgezeichnet: startTimeRef.current const startTimeRef = useRef(Date.now()); const [t, setT] = useState(Datum.jetzt()); Notieren Sie für jedes nachfolgende Bild der Animation, wie viel Zeit seit dem Start der Animation vergangen ist, und berechnen Sie die Zahl, die im aktuellen Bild erreicht werden sollte, d. h. currentValue useEffect(() => { const rafFunc = () => { const jetzt = Date.jetzt(); const t = jetzt - startTimeRef.current; wenn (t >= Zeitraum) { setZ(Zeitraum); } anders { setzeT(t); requestAnimationFrame(rafFunc); } }; lass raf; wenn (autoScroll) { raf = requestAnimationFrame(rafFunc); startTimeRef.current = Date.now(); } anders { raf und cancelAnimationFrame(raf); } return () => raf und cancelAnimationFrame(raf); }, [Punkt, AutoScroll]); const currentValue = useMemo(() => ((bis - von) / Zeitraum) * t + von, [t, Zeitraum, von, bis]); Vergleichen Sie die Zahlen jeder Ziffer an der aktuellen Position. Wenn es eine Änderung gibt, ändern Sie den Offset. Der Offset ist die Differenz zwischen der Zahl der aktuellen Ziffer und der nächsten Ziffer. Diese Änderung wird in jedem Frame aneinandergereiht, um eine Laufanimation zu bilden. Erfolge Dies ist das Ende des Artikels über die Verwendung von js zur Implementierung einer schrittweise zunehmenden digitalen Animation. Weitere relevante Inhalte zu schrittweise zunehmenden digitalen Animationen mit js finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Beispiel, wie nginx dynamische und statische Trennung implementiert
Inhaltsverzeichnis Definition Die Rolle des Curso...
Vorwort Die Rolle des Prozessmanagements: Integri...
Inhaltsverzeichnis 1. Holen Sie sich einen zufäll...
1. „Get“ wird verwendet, um Daten vom Server abzu...
In diesem Artikelbeispiel wird der spezifische Co...
Vorwort Kürzlich stieß ich in einem Projekt auf e...
Aber vor kurzem habe ich festgestellt, dass die Ve...
Das W3C, eine 1994 gegründete Organisation, zielt...
Hallo zusammen, ich bin Liang Xu. Wie wir alle wi...
Docker installieren Aktualisieren Sie das Yum-Pak...
brauchen: In der Hintergrundverwaltung gibt es hä...
Inhaltsverzeichnis Funktionsformat sofort ausführ...
In einer Tabelle können Sie die Farbe des unteren...
Native JS implementiert das Klickzahlenspiel zu I...
Inhaltsverzeichnis Änderungen an der Rendering-AP...