Как оживить векторный путь, как его рисование, постепенно? Другими словами, медленно покажите пиксель пути по пикселям.
Я использую Raphaël.js
, но если ваш ответ не является специфичным для библиотеки - например, может быть, существует какой-то общий шаблон программирования для такого рода вещей (я довольно новичок в векторной анимации) - приветствую!
Это легко сделать с прямыми дорожками, так же просто, как пример на что страница::
path("M114 253").animate({path: "M114 253 L 234 253"});
Но попробуйте изменить код на этой странице, скажем так:
path("M114 26").animate({path: "M114 26 C 24 23 234 253 234 253"});
И вы поймете, что я имею в виду. Путь, конечно, анимирован из его начального состояния (точка "M114 26" ) до конечного состояния (кривая "C 24 23 234 253 234 253", начиная с точки "M114 26" ), но не так, как указано в вопросе, а не как он рисуется.
Я не вижу, как это может сделать animateAlong
. Он может анимировать объект вдоль пути, но как я могу сделать этот путь, чтобы постепенно проявлять себя, когда объект анимируется вдоль него?
Решение?
(Via ответ peteorpeter.)
Кажется, что в настоящее время лучший способ сделать это - через "поддельные" тире с использованием необработанного SVG. Для объяснения см. это демо или этот документ, страница 4.
Как произвести прогрессивный чертеж?
Мы должны использовать
stroke-dasharray
иstroke-dashoffset
и знать длину кривой для рисования. Этот код ничего не рисует на экране для круга, эллипса, полилинии, полигона или пути:<[element] style="stroke-dasharray:[curve_length],[curve_length]; stroke-dashoffset:[curve_length]"/>
Если в анимированном элементе stroke-dashoffset уменьшается до 0, мы получаем прогрессивный рисунок кривой.
<circle cx="200" cy="200" r="115" style="fill:none; stroke:blue; stroke-dasharray:723,723; stroke-dashoffset:723"> <animate begin="0" attributeName="stroke-dashoffset" from="723" to="0" dur="5s" fill="freeze"/> </circle>
Если вы знаете лучший способ, оставьте ответ.
Обновить (26 апреля 2012 г.): нашел пример, который хорошо иллюстрирует идею, см. Анимированные кривые Безье.