#svg #external #nodelist #anime.js
#svg #внешний #список узлов #anime.js
Вопрос:
Я пытаюсь анимировать все <rect>
внутри SVG с помощью anime.js.
Пока SVG является встроенным, я могу вызвать querySelectorAll()
или getElementsByTagName()
и использовать этот список узлов в качестве атрибута для targets:
, и все выбранные элементы будут анимированы.
elements = document.querySelectorAll("rect");
внутри кода аниме
targets: elements,
НО: Когда я связываю тот же самый код SVG с внешним SVG (встроенным с <object>
элементом), anime.js прекращает работу (по-прежнему будет работать только FireFox), когда я устанавливаю
elements2 = document.getElementById("SVG").contentDocument.querySelectorAll("rect");
targets: elements2,
Когда я получаю отдельные элементы для targets:
атрибута, например
targets: elements2[0|,
anime.js будет анимировать отдельный элемент.
Функция также не будет работать.
targets: function(i){return elements2[i];},
Как я могу анимировать элементы в качестве целевых объектов во внешнем SVG в Edge / IE / Safari / Chrome с помощью anime.js ?
Комментарии:
1. Пожалуйста, также включите код, который показывает это поведение, и всю необходимую информацию для его воспроизведения, в идеале минимальный рабочий тестовый пример (например, для некоторых SVG Википедии как «внешних»). Вы также можете использовать функцию фрагмента кода в редакторе вопросов (работает как jsfiddle) для создания примера кода, пригодного для выполнения.
2. Только IE / Edge? Вы пробовали какой-либо другой браузер?
3. @RobertLongson … о, как я вижу, это работает только в Firefox. Также не работает в Chrome и Safari…
Ответ №1:
Таким образом, единственный обходной путь для anime.js и внешний SVG, похоже, предназначен для сбора всех элементов в новый массив и использования этого в качестве targets:
атрибута.
var elements3 = new Array();
elements2 = document.getElementById("SVG").contentDocument.querySelectorAll("rect");
for (i = 0; i<elements2.length; i ) {
elements3.push(elements2[i]);
}
targets: elements3,
Но я не понимаю, зачем это необходимо…
Комментарии:
1. Не могли бы вы, пожалуйста, также поделиться своим html-кодом, чтобы я мог воспроизвести вашу проблему и найти причину?
2. @JeniferJiang рабочий пример со встроенным svg: jsfiddle.net/hirschferkel/xy5mb3kp/3
3. @JeniferJiang сохраняйте svg-код таким, какой он есть во внешнем файле, и используйте этот нерабочий пример кода: jsfiddle.net/hirschferkel/xy5mb3kp/12
4. @JeniferJiang в любом случае, это ошибка в anime.js поскольку есть еще несколько, связанных с внешним svg.