#flash #actionscript-3 #addeventlistener #event-listener
#flash #actionscript-3 #addeventlistener #прослушиватель событий
Вопрос:
У меня есть этот фрагмент кода AS3. он загружает внешний SWF-файл и должен его воспроизвести. Я добавил прослушиватель событий, который запускается при загрузке файла. Вызываемая им функция перемещает видео на самый нижний слой, чтобы кнопки все еще отображались, а затем воспроизводит файл. Проблема в том, что прослушиватель событий никогда не запускается. Кто-нибудь может помочь? Заранее спасибо.
Дэйв
var loadit:Loader = new Loader();
var load_request:URLRequest = new URLRequest("http://www.friedmanllp.com/video/intro.swf");
loadit.addEventListener(Event.COMPLETE, onCompleteHandler);
//swfLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
//loadit.load(load_request);
function onCompleteHandler(loadEvent:Event) {
addChildAt(loadEvent.currentTarget.content, 1);
loadit.load(load_request);
}
Комментарии:
1. почему ваш первый вызов //loadit.load(load_request); прокомментирован? Кажется, ваш загрузчик никогда не загружает какие-либо данные
2. Какова цель
onCompleteHandler
события? Как это выполняется перед вызовом метода load?3. Я закомментировал это во время просмотра видео, прежде чем видео было присвоено правильному слою. Таким образом, вы услышите это, но не увидите в течение нескольких секунд. Возможно, произошло событие. ЗАВЕРШЕНО. Сначала я попытался переместить событие загрузки ПОСЛЕ строки кода addChildAt. ИТАК … я использовал Event. ИНИЦИАЛИЗАЦИЯ, и это позаботилось об этом. Не могли бы вы, пожалуйста, удалить значение -1. Я чувствую, что это очень правильный вопрос, хотя в итоге я решил его сам.
Ответ №1:
Несколько вещей неправильны.
Во-первых, ваш загрузчик никогда не загрузится, потому что вы никогда не просили его об этом. У вас закомментирован вызов метода load.
Кроме того, послушайте crooksy88. Вам необходимо прослушать свойство contentLoaderInfo для события завершения. Прослушивание экземпляра Loader не приведет к отправке искомого события.
Также предупреждение — убедитесь, что ваша переменная loadit не собирает мусор! Если опубликованный вами код выполняется в вызове функции, то вам необходимо где-то сохранить ваш экземпляр Loader (например, в переменной экземпляра), чтобы убедиться, что он остается в памяти.
Код должен выглядеть примерно так:
var load_request:URLRequest = new URLRequest("http://www.mydomain.com/mySubFolder/myExternal.swf");
var loadit:Loader = new Loader();
loadit.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
loadit.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
loadit.load(load_request);
function onProgressHandler(event:ProgressEvent):void
{
trace("onProgressHandler(event)");
}
function onCompleteHandler(event:Event):void
{
trace("onCompleteHandler(event)");
addChildAt(loadit, 1);
}
Комментарии:
1. Спасибо за подробный ответ. Я решил это, используя Event. ИНИЦИАЛИЗИРУЙТЕ вместо этого событие. ЗАВЕРШЕНО.
Ответ №2:
Попробуйте это…
loadit.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
Комментарии:
1. Я пробовал это раньше, никогда не работало. Для этого нет предварительной загрузки. Он просто запускается. Имеет ли это значение?
Ответ №3:
Я решил это с помощью Event.ИНИЦИАЛИЗАЦИЯ:
var loadit:Loader = new Loader();
var load_request:URLRequest = new URLRequest("http://www.friedmanllp.com/video/intro.swf");
loadit.contentLoaderInfo.addEventListener(Event.INIT, onCompleteHandler);
loadit.load(load_request);
function onCompleteHandler(loadEvent:Event) {
addChildAt(loadEvent.currentTarget.content, 1);
}
Ответ №4:
Краткая версия, основанная на пальцах
var loadIt:Loader = new Loader();
on(loadIt.contentLoaderInfo).complete = function (e:Event) {
addChildAt(e.currentTarget.content, 1);
}
loadIt.load(new URLRequest("http://www.friedmanllp.com/video/intro.swf"));