Прыжок анимации пути SVG

Я хочу анимировать путь SVG. У меня такие же точки с такими же настройками Безье. Когда я перемещаю 2 точки в центр прямоугольника, анимация дергается и не плавная.

Я обнаружил, что если эти точки изначально не находятся на прямом пути, анимация получается плавной! Похоже на баг(

Взгляните на приведенный ниже код, демонстрирующий проблему, или проверьте его по адресу jsfiddle

<p>
    Jumpy animation
    </p>
    <svg
          width="200px"
          height="133px"
          viewBox="0 0 200 133"
          version="1.1"
          xmlns="http://www.w3.org/2000/svg"
        >
          <path fill="#FFFFFF" stroke="#616161" stroke-width="4">
            <animate
              repeatCount="indefinite"
              fill="freeze"
              attributeName="d"
              dur="1s"
              values="
                  M194.002061,2 L6.04008364,2 C4.93732761,2 3.93634261,2.44884122 3.21071297,3.17293744 C2.4868279,3.89529278 2.03648273,4.89249429 2.03520721,5.99450035 C2.03520685,5.99479332 2.00668933,27.8652779 2.0009858,56.2997166 L2.00099044,75.7284095 C2.00633859,102.416639 2.03165325,123.946234 2.03537152,126.995569 C2.03658483,128.103158 2.48473311,129.104131 3.20922748,129.828298 C3.93400562,130.552748 4.93501692,131 6.04008364,131 L194.002061,131 C195.103988,131 196.103728,130.551165 196.827984,129.826994 C197.551106,129.103958 198,128.10572 198,127.002769 L198,6.00648893 C198,4.90021634 197.552004,3.89812727 196.827599,3.1726896 C196.10443,2.44849045 195.105573,2 194.002061,2 Z;
                  M194.002061,2 L6.04008364,2 C5.10902172,2 4.31668949,2.30236194 3.85350371,2.90851535 C3.39667486,3.50634969 3.31057704,4.33560556 3.54696163,5.22117815 C3.86947297,6.28159062 12,33.3316693 12,66 C12,98.5769844 3.88123574,126.502941 3.52148092,127.724391 C3.29190054,128.632682 3.3847554,129.480677 3.85171612,130.090231 C4.31671586,130.697225 5.10716799,131 6.04008364,131 L194.002061,131 C194.93514,131 195.729297,130.695801 196.194861,130.088316 C196.654,129.489213 196.743593,128.658124 196.508976,127.7702 C196.191061,126.712841 188,99.1556305 188,66 C188,32.9864348 196.081953,6.47466459 196.47066,5.21865408 C196.704535,4.32673476 196.625248,3.49294113 196.169159,2.8935357 C195.712562,2.29346354 194.928003,2 194.002061,2 Z;
                  "
            />
          </path>
        </svg>
        
        <p>Smooth animation</p>
    <svg
          width="200px"
          height="133px"
          viewBox="0 0 200 133"
          version="1.1"
          xmlns="http://www.w3.org/2000/svg"
        >
          <path fill="#FFFFFF" stroke="#616161" stroke-width="4">
            <animate
              repeatCount="indefinite"
              fill="freeze"
              attributeName="d"
              dur="1s"
              values="
    
                  M194.002061,2 L6.04008364,2 C5.01864027,2 4.13094436,2.38711966 3.54504923,3.05900142 C2.96245482,3.72709805 2.69875705,4.65340158 2.8319904,5.66241724 C2.94868384,6.43004297 7,33.3049889 7,66 C7,98.6124871 2.94857998,126.406308 2.81356562,127.323487 C2.6863776,128.338493 2.95459365,129.271195 3.54304738,129.943133 C4.13015485,130.613535 5.01675297,131 6.04008364,131 L194.002061,131 C195.024357,131 195.913135,130.612952 196.500141,129.941232 C197.083085,129.274159 197.347862,128.349268 197.215493,127.34166 C197.098926,126.569179 193,99.1791137 193,66 C193,32.9505546 197.046245,6.61163817 197.194423,5.65815893 C197.326276,4.64771432 197.066516,3.7189792 196.484282,3.05011469 C195.903212,2.38258626 195.021469,2 194.002061,2 Z;
                  M194.002061,2 L6.04008364,2 C5.10902172,2 4.31668949,2.30236194 3.85350371,2.90851535 C3.39667486,3.50634969 3.31057704,4.33560556 3.54696163,5.22117815 C3.86947297,6.28159062 12,33.3316693 12,66 C12,98.5769844 3.88123574,126.502941 3.52148092,127.724391 C3.29190054,128.632682 3.3847554,129.480677 3.85171612,130.090231 C4.31671586,130.697225 5.10716799,131 6.04008364,131 L194.002061,131 C194.93514,131 195.729297,130.695801 196.194861,130.088316 C196.654,129.489213 196.743593,128.658124 196.508976,127.7702 C196.191061,126.712841 188,99.1556305 188,66 C188,32.9864348 196.081953,6.47466459 196.47066,5.21865408 C196.704535,4.32673476 196.625248,3.49294113 196.169159,2.8935357 C195.712562,2.29346354 194.928003,2 194.002061,2 Z;
                  "
            />
          </path>
        </svg>

<p>How to create smooth animation that starts at the same point as the first rectangle? </p>

person Dmitry Mind    schedule 13.01.2021    source источник
comment
Для плавной анимации у вас должно быть одинаковое количество команд пути. Они также должны быть одного типа в том же порядке. Я полагаю, что ваши пути просто недостаточно похожи. (Команды пути - это буквы).   -  person Robert Longson    schedule 13.01.2021
comment
Я создал этот путь, продублировав ту же форму и просто переместив 2 точки. Вероятно, при экспорте формы пути из графического ПО автоматически удаляется 2 точки из середины пути. В этом случае я не вижу способа сделать эту анимацию гладкой.   -  person Dmitry Mind    schedule 13.01.2021


Ответы (1)


Я обнаружил, что при перетаскивании узлов в векторном редакторе меняется тип узлов
Поэтому плавная анимация не получается даже при равенстве количества узловых точек в начальном и конечном пути фигуры.

Оставалось решить проблему, как предотвратить изменение типа узловых точек при перетаскивании.
Я обнаружил, что чаще всего тип автоматически сглаженных точек меняется на другие типы узловых точек
Поэтому я старался избегать использования узловых точек этого типа.
Сначала я создал прямоугольник с вогнутыми сторонами, а затем преобразовал эти стороны в прямые линии.

При таком приеме тип узловых точек не изменился и анимация стала плавной.

<p>Smooth animation</p>
    <svg
          width="200px"
          height="133px"
          viewBox="0 0 200 133"
          version="1.1"
          xmlns="http://www.w3.org/2000/svg">
          <path fill="#FFFFFF" stroke="#616161" stroke-width="4">
            <animate
              repeatCount="indefinite"
              fill="freeze"
              attributeName="d"
              dur="3s"
              values="    
            m5.8 127.8c-1.6-1.6-3-3.7-3-6 0-14.3-0.7-34.2-0.7-53.7 0-18.3 0.7-55.2 0.7-55.2 0 0 0.1-6.5 2.1-8.6C6.7 2.5 12.3 2.3 12.3 2.3H187.9c0 0 4.6 0.9 6.2 2.4 2.9 2.8 2.9 8.3 2.9 8.3 0 0-0.5 36.9-0.5 55.2 0 19.4 0.5 35.9 0.5 53.7 0 2.4-1.3 4.7-3 6.4-1.6 1.6-6 2.7-6 2.7H12.3c0 0-4.8-1.5-6.5-3.2z;
            m5.8 127.8c-1.6-1.6-3-3.7-3-6 0-14.3 9.3-34.2 9.3-53.7 0-18.3-9.3-55.2-9.3-55.2 0 0 0.1-6.5 2.1-8.6C6.7 2.5 12.3 2.3 12.3 2.3H187.9c0 0 4.6 0.9 6.2 2.4 2.9 2.8 2.9 8.3 2.9 8.3 0 0-8.5 36.9-8.5 55.2 0 19.4 8.5 35.9 8.5 53.7 0 2.4-1.3 4.7-3 6.4-1.6 1.6-6 2.7-6 2.7H12.3c0 0-4.8-1.5-6.5-3.2z;
                m5.8 127.8c-1.6-1.6-3-3.7-3-6 0-14.3-0.7-34.2-0.7-53.7 0-18.3 0.7-55.2 0.7-55.2 0 0 0.1-6.5 2.1-8.6C6.7 2.5 12.3 2.3 12.3 2.3H187.9c0 0 4.6 0.9 6.2 2.4 2.9 2.8 2.9 8.3 2.9 8.3 0 0-0.5 36.9-0.5 55.2 0 19.4 0.5 35.9 0.5 53.7 0 2.4-1.3 4.7-3 6.4-1.6 1.6-6 2.7-6 2.7H12.3c0 0-4.8-1.5-6.5-3.2z"
            />
          </path>
        </svg>

person Alexandr_TT    schedule 11.02.2021