Heim > Web-Frontend > js-Tutorial > Hauptteil

Nachahmung des Hervorhebens von Text mit einem Stift

WBOY
Freigeben: 2024-07-18 09:50:59
Original
993 Leute haben es durchsucht

Imitation of highlighting text with a pen

Dieser Codepen ist von der Arbeit von Sten Hougaard inspiriert

Vorbereitungen

Lassen Sie uns zwei Container für verschiedene Implementierungen von Animationen erstellen:

<div class="container">
 <h1>Animated text
  <svg viewbox="0 0 235 40" xmlns="http://www.w3.org/2000/svg" id="animated-svg">
   <path d="..."/>
  </svg>
 </h1>
</div>

<div class="container">
 <h1 id="clickable-header">Click on me!
  <svg viewbox="0 0 235 40" xmlns="http://www.w3.org/2000/svg" id="clickable-svg">
   <path d="..."/>
  </svg>
 </h1>
</div>
Nach dem Login kopieren

Ich habe SVG mit Adobe Illustrator erstellt, das Hauptmerkmal dafür muss eine kleine Höhe und eine große Breite sein.
Es ist wichtig zu erwähnen, dass SVG ein untergeordnetes Element eines Header-Elements ist, da wir SVG relativ dazu positionieren.

CSS

Wir verwandeln unsere Container in Flexboxen, um alles elegant in der Mitte zu positionieren.

.container {
 display: flex;
 place-content: center;
}

h1 {
 display: inline;
 position: relative;
}   
Nach dem Login kopieren

Inline wird verwendet, um einfach die Breite des Elements auf seinen Inhalt zu reduzieren, da SVG darauf angewiesen ist

Als nächstes sollten wir SVG relativ zu einem Header positionieren:

svg {
 min-width: 110%;
 min-height: 100%;
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%,-50%);
}
Nach dem Login kopieren

Wir verwenden die Standardmethode, um das relative Element in der Mitte des übergeordneten Elements zu positionieren. Um SVG an den Text anzupassen, sollten wir Mindestbreite und Mindesthöhe anwenden.

Animationslogik mit Javascript

Um Elemente in Javascript zu animieren, können wir die wunderbare Animationsmethode (Keyframes, Optionen) verwenden.

Schlüsselbilder

Lassen Sie uns die Funktion getDrawingParameters analysieren, die Eigenschaften zum Durchlaufen bereitstellt:

const getDrawingParameters = (path) => {
 const length = path.getTotalLength();
 path.style.strokeDasharray = length;
 const drawingProperties = [
  { strokeDashoffset: length, easing: "ease-in" },
  { strokeDashoffset: 0, offset: 0.15 }
 ];
 return drawingProperties;
};
Nach dem Login kopieren

Zuerst müssen wir mithilfe der SVG-Methode getTotalLength:
wissen, wie lang unser Weg tatsächlich ist

const length = path.getTotalLength();
Nach dem Login kopieren

Jetzt sollten wir unsere berechnete Länge verwenden, um das Zeichnen zu simulieren. Definieren wir unseren Ausgangspunkt. Wir benötigen das Attribut StrokeDasharray:

path.style.strokeDasharray = length;
Nach dem Login kopieren

Hier weisen wir dieses Attribut an, einen Pfad mit abwechselnd einem Strich (Größe=Länge) und einer Lücke (Größe=Länge) zu zeichnen.


Das nächste Attribut, bei dem wir die Länge benötigen, ist Stroke-Dashoffset:

path.style.strokeDashoffset = length;
Nach dem Login kopieren

Dieser Wert gibt an, dass die Berechnung des Strich-Arrays anhand des Längenwerts erfolgt. Und da wir unser Strich-Array auf „Strich-Länge Lücken-Länge Strich-Länge Lücken-Länge ...“ setzen, ist der Startpfad leer (Lücke).


Also definieren wir unsere iterierbaren Eigenschaften im Array:

 const drawingProperties = [
  { strokeDashoffset: length, easing: "ease-in" },
  { strokeDashoffset: 0, offset: 0.15 }
 ];
Nach dem Login kopieren

Wir verwenden Offset, um die relative Zeit zu definieren, zu der diese Eigenschaft erreicht werden muss. Es wurde entwickelt, um die Verzögerung bei jeder Iteration zu imitieren.

Optionen

Das zweite Argument der animate-Methode sind Optionen:

animatedPath.animate(
 getDrawingParameters(animatedPath), 
 {duration: 10000, iterations: Infinity}
);
Nach dem Login kopieren

Wir stellen unsere Animation auf unendliche Iterationen und eine Dauer von 10 Sekunden ein. Erinnern Sie sich an den Offset? Unsere „aktive“ Animation dauert nur 1,5 Sekunden.

Das obige ist der detaillierte Inhalt vonNachahmung des Hervorhebens von Text mit einem Stift. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!