as3 ждать пока изображение загружается при нажатии кнопки - PullRequest
1 голос
/ 06 мая 2011

У меня есть слайд-шоу, которое загружает файлы изображений с классом BulkLoader из здесь . Когда первое изображение полностью загружено, оно добавляется в контейнер MovieClip для добавления его на сцену ... и оно отображается в полноэкранном режиме, но только при нажатии кнопки:

fullScreenButton.addEventListener(MouseEvent.CLICK, showFull);

function showFull(e:MouseEvent):void {   
    stage.addChild(mcSlideHolder);
    ...
}

Загрузка изображения с BulkLoader в отдельную функцию loadAllSlides (), которая вызывается с самого начала:

imageLoader = new BulkLoader("imgLoader");
imageLoader.add(new URLRequest(paths[0]), {id:"slide_0});                                
imageLoader.get("slide_0).addEventListener(Event.COMPLETE, onFirstSlideLoaded);
imageLoader.start(1);

А в процессе загрузки:

function onFirstSlideLoaded(e:Event):void
{
    firstImage = imageLoader.getBitmap(e.currentTarget.id);
    currentImage.addChild(firstImage);
    mcSlideHolder.addChild(currentImage); 
    mcSlideHolder.dispatchEvent(new Event("firstImgAdd"));
}

Это работает нормально, если только кнопка fullScreenButton не будет нажата до полной загрузки изображения, тогда, конечно, ничего не видно. Как получить событие нажатия кнопки, которое вызывает функцию showFull () для ожидания загрузки / добавления изображения в контейнер, или как я могу добавить его снова? Каков возможный / лучший подход?

Я пытался отправить пользовательское событие «firstImgAdd», которое снова добавляет изображение в контейнер при нажатии кнопки fullScreenButton, а также с блоком try / catch или даже простым условием if, но ни одно из них не сработало, то есть изображение не добавляется в контейнер после завершения загрузки, если кнопка нажата слишком рано. Любая помощь приветствуется, спасибо заранее

Ответы [ 2 ]

1 голос
/ 06 мая 2011

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

Что-то вроде:

private var slideLoaded:Boolean = false;
private var requestCued:Boolean = false;

imageLoader = new BulkLoader("imgLoader");
imageLoader.add(new URLRequest(paths[0]), {id:"slide_0"});                                
imageLoader.get("slide_0").addEventListener(Event.COMPLETE, onFirstSlideLoaded);
imageLoader.start(1);

fullScreenButton.addEventListener(MouseEvent.CLICK, showFull);

function showFull(e:MouseEvent):void {   
    if (slideLoaded)
        stage.addChild(mcSlideHolder);
    else 
        requestCued = true;
}

function onFirstSlideLoaded(e:Event):void {
    slideLoaded = true;
    firstImage = imageLoader.getBitmap(e.currentTarget.id);
    currentImage.addChild(firstImage);
    mcSlideHolder.addChild(currentImage);
    if (requestCued)
        stage.addChild(mcSlideHolder);
}
0 голосов
/ 06 мая 2011

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

ЕДИНСТВЕННЫЙ способ активировать полноэкранный режим - это непосредственно из периода взаимодействия с пользователем .IE: щелчок мыши
Посмотрите на это так, любой хакер, пытающийся заставить пользователя посмотреть свою рекламу на весь экран и не иметь выхода, потому что пользователь выключил полноэкранный режим, хакер может просто снова открыть его.

Самое близкое, что вы можете получить к полноэкранному режиму без взаимодействия с пользователем, - это расширить SWF до полного размера HTML-документа.

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

...