Доступ к функциям createjs вне сценария animatecc - PullRequest
0 голосов
/ 02 ноября 2018

Я сейчас довольно долго ищу эту тему, и, похоже, решение этой проблемы не доступно. Однако, прежде чем закрыть дело, я хотел проиллюстрировать проблему здесь как последний шаг, чтобы убедиться, что я ничего не пропустил. Проблема: У меня есть изображение adobean animatecc, встроенное в элемент iframe. Графика была создана редактором в компании, в которой я сейчас работаю. Теперь мой супервайзер хочет, чтобы я остановил анимацию снаружи этой созданной графики animatecc. Поэтому в основном я хочу получить доступ к элементу Ticker, который содержит информацию о частоте кадров в секунду, чтобы изменить его значение и, следовательно, остановить анимацию. Во всяком случае, кажется, что просто невозможно вмешаться в эту графику после того, как она была сгенерирована из Adobe Tool. У кого-нибудь из вас была такая же проблема, и удалось ли ее решить?

Было бы очень полезно, если бы у кого-то было какое-либо решение или предложение по решению этой проблемы.

Заранее спасибо, ребята, хорошего дня.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Если вы находитесь в одном домене, вы сможете получить доступ к встроенному контексту iframe.

var context = document.getElementById("iframe").contentWindow;

Оттуда это должно быть так же просто, как сбросить тикер. createjs объект является глобальным объектом в окне, в котором находится весь контент CreateJS.

context.createjs.Ticker.reset();

Вы также упомянули о снижении частоты кадров - что может также работать:

context.createjs.Ticker.timingMode = "interval"; // Required as RAF can't change framerate
context.createjs.Ticker.framerate = 0.0001; // 0 will cause a division by 0 error probably

Последнее замечание: Ticker поддерживает «паузу», но на самом деле он не прекращает тикать, это зависит от разработчика, чтобы реализовать паузу, основанную на событии Ticker.

Надеюсь, это поможет!

0 голосов
/ 02 ноября 2018

Хорошо, как всегда, после публикации проблемы я нашел решение, которое работает, и я решил поделиться им здесь на случай, если кто-нибудь столкнется с подобной проблемой.

Решение:

После того, как iframe отобразит изображение animatecc, у вас есть объект adobean, с которым вы можете работать adobean = document.getElementsByTagName("iframe")[0].contentWindow.AdobeAn

Этот объект имеет функцию getComposition, которая позволяет получить некоторые компоненты animatecc element.

Один компонент - это компонент сцены, который можно получить с помощью вызова getStage(). Сама сцена имеет дочерние узлы, одним из которых является логический атрибут tickEnabled.

adobean.getComposition(adobean.bootcompsLoaded[0]).getStage().children[0].tickEnabled = false;
Эта строка кода визуализирует то, что я только что описал. При значении false анимация остановится.

Важно, чтобы вы подождали iframe, пока он не был загружен, так как в противном случае этот adobean будет неопределенным.

Так что я надеюсь, что это может помочь одному из вас, так как он, черт возьми, спас бы мне одну неделю исследований.

Хорошего дня!

...