let svg = document.querySelector("svg");
let path = svg.querySelector(".path");
let pathLength = path.getTotalLength().toFixed(1) * 1;
/**
* save segments' path lengths to array
**/
let segments = [
{ offset: 0, dash: 78.6, currentLength: 78.6 },
{ offset: -78.6, dash: 68.8, currentLength: 147.4 },
{ offset: -147.4, dash: 65.1, currentLength: 212.5 },
{ offset: -212.5, dash: 81.9, currentLength: 294.4 },
{ offset: -294.4, dash: 66.3, currentLength: 360.7 },
{ offset: -360.7, dash: 61.4, currentLength: 422.1 },
{ offset: -422.1, dash: 76.5, currentLength: 498.6 },
{ offset: -498.6, dash: 116.9, currentLength: 615.5 },
{ offset: -615.5, dash: 89.3, currentLength: 704.8 },
{ offset: -704.8, dash: 90.2, currentLength: 795 },
{ offset: -795, dash: 26.6, currentLength: 821.6 }
];
/**
* change stroke dash attributes for animation
**/
function strokeTo(path, pathLength, offset, dash) {
let gap = pathLength - dash;
path.setAttribute("stroke-dashoffset", offset);
path.setAttribute("stroke-dasharray", dash + " " + gap);
}
svg {
border: 1px solid #ccc;
display: inline-block;
font-size: calc( ( 50vw + 50vh )/ 2) ;
width: 1em;
}
.path{
transition:0.5s
}
<svg width="200" height="200" viewBox="50 50 240 270">
<path class="path" fill="white" stroke="black" stroke-width="4"
d="M66.039,133.545c0,0-21-57,18-67s49-4,65,8 s30,41,53,27s66,4,58,32s-5,44,18,57s22,46,0,
45s-54-40-68-16s-40,88-83,48s11-61-11-80s-79-7-70-41 C46.039,146.545,53.039,128.545,66.039,133.545z"/>
</svg>
<p>Animate to stroke segment <button type="button" onclick="strokeTo(path,821.6, 0, 78.6)">1</button><button type="button" onclick="strokeTo(path,821.6, 0, 147.4)">2</button><button type="button" onclick="strokeTo(path,821.6, 0, 212.5)">3</button><button type="button" onclick="strokeTo(path,821.6, 0, 294.4)">4</button><button type="button" onclick="strokeTo(path,821.6, 0, 360.7)">5</button><button type="button" onclick="strokeTo(path,821.6, 0, 422.1)">6</button><button type="button" onclick="strokeTo(path,821.6, 0, 498.6)">7</button><button type="button" onclick="strokeTo(path,821.6, 0, 615.5)">8</button><button type="button" onclick="strokeTo(path,821.6, 0, 704.8)">9</button><button type="button" onclick="strokeTo(path,821.6, 0, 795)">10</button><button type="button" onclick="strokeTo(path,821.6, 0, 821.6)">11</button></p>
<p>Animate single segment <button type="button" onclick="strokeTo(path,821.6, 0, 78.6)">1</button><button type="button" onclick="strokeTo(path,821.6, -78.6, 68.8)">2</button><button type="button" onclick="strokeTo(path,821.6, -147.4, 65.1)">3</button><button type="button" onclick="strokeTo(path,821.6, -212.5, 81.9)">4</button><button type="button" onclick="strokeTo(path,821.6, -294.4, 66.3)">5</button><button type="button" onclick="strokeTo(path,821.6, -360.7, 61.4)">6</button><button type="button" onclick="strokeTo(path,821.6, -422.1, 76.5)">7</button><button type="button" onclick="strokeTo(path,821.6, -498.6, 116.9)">8</button><button type="button" onclick="strokeTo(path,821.6, -615.5, 89.3)">9</button><button type="button" onclick="strokeTo(path,821.6, -704.8, 90.2)">10</button><button type="button" onclick="strokeTo(path,821.6, -795, 26.6)">11</button></p>