Beim Zeichnen von Linien mit SVG haben Sie oft ein <path>-Element mit einem stroke. Sie setzen ein stroke-dasharray, das so lang ist wie der Pfad selbst, sowie einen stroke-offset, der so weit reicht, dass der gesamte gestrichene Pfad anfänglich versteckt erscheint. Dann animieren Sie den stroke-offset zurück auf 0, damit Sie zusehen können, wie die Form „gezeichnet“ wird.
Die Länge des Pfades herauszufinden, ist der Trick, den Sie glücklicherweise in JavaScript tun können, indem Sie den Pfad auswählen und pathEl.getTotalLength() ausführen. Es wird wahrscheinlich eine komische Dezimalzahl sein. Ein bisschen schade, dass wir das nicht in CSS bekommen können, aber c'est la vie.
Hier ist der Trick!
Sie müssen die Länge des Pfades nicht messen, weil Sie sie festlegen können.
Also machen Sie wie
<path d="M66.039,133.545 ... " pathLength="1" />
Das bewirkt an sich nichts (soweit ich weiß). Es zeichnet nicht nur einen Teil des Pfades – es zeichnet immer noch den gesamten Pfad, als hätten Sie nichts getan, nur dass die „Mathematik“ der Pfadlänge jetzt auf einem Wert von 1 basiert.
Jetzt können wir das stroke-dasharray auf 1 setzen und den Offset in CSS animieren!
.path {
stroke-dasharray: 1;
stroke-dashoffset: 1;
animation: dash 5s linear alternate infinite;
}
@keyframes dash {
from {
stroke-dashoffset: 1;
}
to {
stroke-dashoffset: 0;
}
}
Was funktioniert
Siehe den Pen
Basic Example of SVG Line Drawing, Backward and Forward von Chris Coyier (@chriscoyier)
auf CodePen.
Ein Hoch auf Adam Haskell, der mir vor ein paar Monaten deswegen eine E-Mail geschickt hat.
Apropos SVG-Linienzeichnen: Lemonade hat eine Landingpage für ihre Spendenaktion 2019 erstellt, die auf der gesamten Seite auf- und abscrollendes SVG-Linienzeichnen verwendet. Sie haben einen Blick hinter die Kulissen darauf geworfen, was ich immer schätze.

Das ist sehr praktisch. Leider wird das Attribut pathLength noch nicht in Safari unterstützt.
https://bugs.webkit.org/show_bug.cgi?id=72401
Die Unterstützung wurde nachgelagert hinzugefügt und kann mit Safari Technology Preview getestet werden (ich konnte sie persönlich in v99 nicht sehen, aber sie scheint jetzt ab v100 klar zu funktionieren).
Es kann eine Weile dauern, bis dies im Safari-Ökosystem breitflächig genutzt werden kann, aber ich freue mich, dass es hinzugefügt wurde.
Ich versuche, Webdesign zu lernen, bin also nicht sehr erfahren in diesen Dingen. Ist es keine gute Methode, die Pfadlänge im Voraus mit Tools wie dem Path Length Calculator zu messen?
Der Punkt ist, dass Sie ihn nicht messen müssen, wenn Sie die Länge selbst festgelegt haben.
Was dieser Artikel sagen will, ist, dass Sie dies mit dieser Methode von pathLength="1" nicht müssen. Die tatsächliche Länge wird irrelevant, da sie durch den Parameter abstrahiert wird.
„Veraltet seit SVG 2“
https://developer.mozilla.org/en-US/docs/Web/API/SVGPathElement/pathLength
Die Support-Tabelle auf dieser Seite ist jedoch falsch – daher frage ich mich, ob das aktuelle Informationen sind oder nicht. Es wäre interessant, die Spezifikation zu sehen, in der sie gestrichen wird.
Ich versuche, dies zu verwenden, um ein Dreieck zu zeichnen, aber leider beginnt und endet die Linie an einer der Ecken, wodurch Linienkappen an einer der Ecken entstehen, anstatt einer einzigen, scharfen Ecke.
Gibt es eine Möglichkeit, den Code zu ändern, um die scharfe Ecke wieder hinzuzufügen?