У меня запутанный путь SVG, состоящий из множества сегментов, определенных с помощью M #, # L #, # M #, # L #, #. Я хотел бы оживить рисунок этого пути, но в том порядке, в котором они перечислены. Я пробовал решения, перечисленные здесь: Can't make paths draw growing slowly with D3, но они рисуют каждый сегмент пути параллельно. Как изменить это, чтобы они анимировались последовательно?Последовательный анимационный SVG с d3js
ответ
Переходы D3 имеют функцию delay()
, которая позволяет указать, когда начать анимацию. Вы можете использовать это, чтобы начать рисовать последовательные сегменты пути после того, как предыдущие были нарисованы. Вы также можете использовать событие перехода end
, чтобы начать следующий переход после завершения предыдущего. Таким образом, вам даже не нужно указывать задержку.
В качестве альтернативы вы можете анимировать путь в SVG самостоятельно без Javascript. См. Пример here. Все, что вам нужно сделать, это в основном добавить animate
элемент в path
, который подскажет, как его нарисовать.
Я столкнулся с этой проблемой в своем приложении для анимации. Если ваш SVG-файл имеет путь с несколькими сегментами перемещения (M #) в элементе <path>
, параллельная анимация неизбежна.
Что вам нужно сделать, так это разбить команды Move (M) в пределах элементов <path>
и сохранить их в отдельных элементах.
. Попросите своего графического художника сделать это или напишите простой синтаксический анализатор, чтобы восстановить файл SVG перед его загрузкой в DOM.
например. Этот файл svg с несколькими командами перемещений в элементе <path>
будет иметь все сегменты, нарисованные в одно и то же время.
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="792px" height="612px" viewBox="0 0 792 612" enable-background="new 0 0 792 612" xml:space="preserve">
<g>
<path d="M184.258,256.649c1.309-1.742,2.541-3.093,3.696-4.184c-4.34-7.825-10.576-17.045-12.287-29.926
c-1.667,21.723-7.667,27.647-7,37.191c0.537,7.686,4.105,13.873,10.521,17.196C178.836,270.993,179.51,262.968,184.258,256.649zM204.334,239.325c-5.241,12.075-8.956,9.837-14.921,15.876c-0.864,0.875-1.775,1.922-2.746,3.213
c-4.61,6.135-4.88,14.29-4.363,19.82c0.342,3.666,1.03,6.181,1.03,6.181C202.334,273.554,206.334,247.225,204.334,239.325zM205.477,208.486c0.602-0.338,1.204-0.661,1.803-0.97c-0.694-0.353-1.444-0.719-2.279-1.104
c-15-6.911-12.667-21.393-12.667-21.393c-16.355,19.708-12.421,38.267-6.032,47.368
C188.276,222.657,194.783,214.486,205.477,208.486zM210.415,209.276c-9.472,4.503-20.029,12.519-21.569,26.141c-0.165,1.458-0.233,2.977-0.179,4.566
c0,0,6.64-0.937,14.51-5.51c0.858-0.5,1.729-1.037,2.61-1.626c7.728-5.17,16.045-13.95,20.214-28.738
C226,204.108,218.617,205.377,210.415,209.276zM177.84,319.268c-1.606-4.102-3.152-10.643-1.438-18.681c0.966-4.531,2.632-6.883,4.521-8.441
c-6.775-6.099-16.252-16.29-16.252-16.29s-2,11.19,2.333,30.938C169.349,317.476,174.032,319.582,177.84,319.268z"/>
</g>
</svg>
Следующий файл svg будет иметь каждый сегмент, нарисованный последовательно. Конечно, вам нужно закодировать анимацию для анимации по одному пути за раз. Если все они находятся внутри элементов пути, это было бы невозможно.
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="792px" height="612px" viewBox="0 0 792 612" enable-background="new 0 0 792 612" xml:space="preserve">
<g>
<path d="M184.258,256.649c1.309-1.742,2.541-3.093,3.696-4.184c-4.34-7.825-10.576-17.045-12.287-29.926
c-1.667,21.723-7.667,27.647-7,37.191c0.537,7.686,4.105,13.873,10.521,17.196C178.836,270.993,179.51,262.968,184.258,256.649z
"/>
<path d="M204.334,239.325c-5.241,12.075-8.956,9.837-14.921,15.876c-0.864,0.875-1.775,1.922-2.746,3.213
c-4.61,6.135-4.88,14.29-4.363,19.82c0.342,3.666,1.03,6.181,1.03,6.181C202.334,273.554,206.334,247.225,204.334,239.325z"/>
<path d="M205.477,208.486c0.602-0.338,1.204-0.661,1.803-0.97c-0.694-0.353-1.444-0.719-2.279-1.104
c-15-6.911-12.667-21.393-12.667-21.393c-16.355,19.708-12.421,38.267-6.032,47.368
C188.276,222.657,194.783,214.486,205.477,208.486z"/>
<path d="M210.415,209.276c-9.472,4.503-20.029,12.519-21.569,26.141c-0.165,1.458-0.233,2.977-0.179,4.566
c0,0,6.64-0.937,14.51-5.51c0.858-0.5,1.729-1.037,2.61-1.626c7.728-5.17,16.045-13.95,20.214-28.738
C226,204.108,218.617,205.377,210.415,209.276z"/>
<path d="M177.84,319.268c-1.606-4.102-3.152-10.643-1.438-18.681c0.966-4.531,2.632-6.883,4.521-8.441
c-6.775-6.099-16.252-16.29-16.252-16.29s-2,11.19,2.333,30.938C169.349,317.476,174.032,319.582,177.84,319.268z"/>
</g>
</svg>
- 1. Анимировать SVG-путь с d3js
- 2. Переупорядочение svg dom с d3js
- 3. Обратный анимационный рисунок линии SVG
- 4. SVG SMIL анимационный элемент роста
- 5. d3js zoom svg и axix
- 6. JSON плану SVG рисования D3js
- 7. d3js прикрепить объект к SVG
- 8. Добавить svg pan zoom для динамически созданного svg с D3js
- 9. Добавление текста SVG внутри SVG круга в d3js
- 10. d3js svg капелька воды или слеза
- 11. Подсказка для svg heatmap/colorscale in d3js
- 12. d3js svg выбор текста по id
- 13. d3js таймсерия - путь имеет SVG огромные значения
- 14. Упрощение генерации строки SVG, созданной D3js
- 15. D3js - Несколько экземпляров одного внешнего файла SVG
- 16. d3js/svg - многоугольник без фиксированных координат?
- 17. d3js draw svg rectangle и строка issue
- 18. d3js Перемещение элементов SVG внутри преобразующей группы
- 19. d3js svg не отображается в chrome
- 20. Почему текст добавляется вне svg-элемента d3js?
- 21. Добавление клона к группе svg в d3js
- 22. D3js - изменить стиль для svg text elemets
- 23. Как создать SVG с линиями сетки с использованием D3JS
- 24. с помощью foreignObject добавить SVG динамически с помощью D3js
- 25. Штыревые маркеры с D3js
- 26. Получить событие клика из рамки SVG с помощью d3js
- 27. Как создать сложные формы SVG с использованием D3JS?
- 28. Поддержка SVG с последними версиями angularjs и d3js
- 29. как я получить высоту элемента с помощью SVG d3js
- 30. Преобразование SVG, созданного с помощью D3js в PNG