Reputation: 5
I created an svg and am attempting to move one circle element along a path. I added the path into the svg to make sure it is appearing in the correct place and it is. However, when using offset-path, the object is not moving along the path provided, but rather moving erratically on the page.
I was basing my model off this pen and but my pen is not successful.
The code:
body{
max-width: 400px;
box-sizing: border-box;
}
#vine-tomatoes circle:first-of-type {
animation: move 5s infinite linear;
offset-path: path("M264,29.7 L270,29.7 L256,29.7 C257.9,30.5 260.9,31.5 264.6,31.5 C266.7,31.5 266.6,52.3 265,63 C256.7,57.3 249.7,55.9 244,56.3 C212.3,58.6 185.1,120.6 173.3,209.7");
}
#vine-tomatoes circle:nth-of-type(4) {
animation: get-hit 2s linear infinite .4s; /* 2s * .2 = */
}
@keyframes move {
0% {
offset-distance: 0;
}
100% {
offset-distance: 100%;
}
}
/* @keyframes wiggle-drop-bounce {
5% {transform: translateX(-1%);}
10% {transform: translateX(1%);}
20% {transform: translateX(0) translateY(10%);}
30% {transform: translateX(-5%) translateY(8%);}
60% {transform: translateX(-15%) translateY(20%);}
100% {transform: translateX(-30%) translateY(45%);}
} */
@keyframes get-hit {
0% {transform: translateX(1%);}
40% {transform: translateX(0);}
}
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 452 390">
<defs><radialGradient cx="50%" fx="50%" fy="50%" r="50%" id="a"><stop stop-color="#453125" offset="0%"/><stop stop-color="#342419" offset="100%"/></radialGradient></defs>
<path d="M93.9 315.69c49.48 3.07 90 29.27 134.07 58.7 8.67 4.43 18.79 6.84 26.91 10.63a174.8 174.8 0 0 0 93.2-4.56c65.86-22.21 120.65-99.15 99.19-177a145.07 145.07 0 0 0-14.3-31.7c-17.88-29.61-45.82-52.23-77.34-60a221.84 221.84 0 0 0-35.8-6.56c-37.13-4-75.66-1.89-111.28-3-15.69.51-32.08 1.43-48.33 3.2a333.48 333.48 0 0 0-35.11 4c-17.55 3-35.07 7.48-51.6 14.36-19.27 8.53-38.78 21-52.85 37.38C6.59 177.52-2.06 198.01.42 222.57c3.19 23.55 13.82 43.39 28.2 59.51 14.16 18 34.94 28.31 57.23 31.85 2.44.59 5.13 1.16 8.05 1.76z" fill="#F0F9EC"/>
<path d="M310.08 203.3c-39.44-2.19-71.72-20.82-106.87-41.75-6.92-3.15-15-4.86-21.45-7.56a155.6 155.6 0 0 0-74.3 3.24c-52.5 15.8-96.18 70.51-79.07 125.87a98.14 98.14 0 0 0 11.4 22.52c14.25 21.06 36.52 37.14 61.69 42.68a194.77 194.77 0 0 0 28.53 4.66c29.6 2.84 60.31 1.35 88.71 2.1 12.51-.36 25.57-1 38.52-2.27 9-.49 18.43-1.38 28-2.82a210.08 210.08 0 0 0 41.09-10.21c15.36-6.07 30.91-14.91 42.13-26.59 11.22-11.68 18.11-26.22 16.14-43.68-2.54-16.75-11-30.86-22.48-42.32-11.29-12.83-27.85-20.13-45.63-22.65-1.94-.387-4.077-.793-6.41-1.22z" fill="#6CC049"/>
<path d="M307.78 237.26a35 35 0 1 1-34.8 35 34.9 34.9 0 0 1 34.8-35z" fill="url(#a)"/>
<g fill="none">
<path d="M282.98 73.26c6-13 18-11 18-11M282.98 125.26c6-13 18-11 18-11" stroke="#6CC049" stroke-width="5"/>
<path d="M258.48 27.26s-.44-25.25 22.25-24.75 22.25 24.75 22.25 24.75v248.5" stroke="#6CC049" stroke-width="5"/>
<path d="M302.98 32.26s12-2 18 11M303.98 82.26s12-2 18 11" stroke="#6CC049" stroke-width="5"/>
</g>
<path fill="#CCB7A5" d="M309.48.76h5v275h-5z"/>
<path d="M291.85 208.76c-7.85 6.42 11.17 8.33 11.17 8.33s-3.54-14.53-11.17-8.33zm0-40c-7.85 6.42 11.17 8.33 11.17 8.33s-3.54-14.53-11.17-8.33zm-17-53c-7.85 6.42 11.17 8.33 11.17 8.33s-3.54-14.53-11.17-8.33zm-4-52c-7.85 6.42 11.17 8.33 11.17 8.33s-3.54-14.53-11.17-8.33zm60.26 21c-7.62-6.23-11.17 8.33-11.17 8.33s19.02-1.88 11.17-8.33zm-16 73c-7.62-6.23-11.17 8.33-11.17 8.33s19.02-1.88 11.17-8.33zm16-133c-7.62-6.23-11.17 8.33-11.17 8.33s19.02-1.88 11.17-8.33z" fill="#6CC049"/>
<g fill="#F42434" id="vine-tomatoes">
<path d="M264,29.7 L270,29.7 L256,29.7 C257.9,30.5 260.9,31.5 264.6,31.5 C266.7,31.5 266.6,52.3 265,63 C256.7,57.3 249.7,55.9 244,56.3 C212.3,58.6 185.1,120.6 173.3,209.7" id="Shape" stroke="#444" stroke-width="1px" fill="none"></path>
<circle cx="263" cy="31" r="20"/>
<circle cx="330" cy="51" r="20"/>
<circle cx="330" cy="111" r="20"/>
<circle cx="273" cy="90" r="20"/>
<circle cx="275" cy="141" r="20"/>
</g>
<circle cx="190" cy="255" r="20" fill="#F42434"/>
<circle cx="190" cy="219" r="20" fill="#F42434"/>
<circle cx="163" cy="260" r="20" fill="#FFB718"/>
<circle cx="113" cy="218" r="20" fill="#FFB718"/>
<circle cx="123" cy="260" r="20" fill="#FFB718"/>
<circle cx="141" cy="226" r="20" fill="#F42434"/>
<circle cx="141" cy="260" r="20" fill="#F42434"/>
<circle cx="163" cy="214" r="20" fill="#FFB718"/>
<path fill="#CCB7A5" fill-rule="nonzero" d="M201.48 209.76h25v85h-25zM81.48 209.76h25v85h-25zM81.48 296.76h145v10h-145z"/>
<path fill="#FFF" fill-rule="nonzero" d="M76.48 270.76h155v30h-155zM76.48 224.76h155v30h-155z"/>
<path d="M215.48 283.26a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zm0-40a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zm-122 40a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zm0-45a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5z" fill="#CCB7A5"/>
</svg>
Upvotes: 0
Views: 260
Reputation: 137171
It seems the Path commands in the path
CSS function are relative to the target's position, even though you used the capitalized absolute version of these commands...
I have to admit I don't know this function, and can't tell if it is a bug in Blink (only implementors yet) or else.
But for a fix, set your <circle>
's cx
and cy
to 0
, or rewrite the path data so it is relative to the circle's position.
body{
max-width: 400px;
box-sizing: border-box;
}
circle {
animation: move 5s infinite linear;
offset-path: path("M264,29.7 L270,29.7 L256,29.7 C257.9,30.5 260.9,31.5 264.6,31.5 C266.7,31.5 266.6,52.3 265,63 C256.7,57.3 249.7,55.9 244,56.3 C212.3,58.6 185.1,120.6 173.3,209.7");
}
@keyframes move {
0% {
offset-distance: 0;
}
100% {
offset-distance: 100%;
}
}
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 452 390">
<path d="M264,29.7 L270,29.7 L256,29.7 C257.9,30.5 260.9,31.5 264.6,31.5 C266.7,31.5 266.6,52.3 265,63 C256.7,57.3 249.7,55.9 244,56.3 C212.3,58.6 185.1,120.6 173.3,209.7" id="Shape" stroke="#444" stroke-width="1px" fill="none"></path>
<circle cx="0" cy="0" r="20"/>
</svg>
Upvotes: 1