我有一个幻灯片,可以从这里加载带有 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"));
}
除非在完全加载图像之前单击全屏按钮,否则这工作正常,那么当然什么都看不到。如何获取调用 showFull() 的按钮单击事件以等待图像加载/添加到容器中,或者如何再次添加它?什么是可能/最好的方法?
我尝试调度一个自定义事件"firstImgAdd",当单击 fullScreenButton 时,该事件会再次将图像添加到容器中,以及使用 try/catch 块甚至简单的 if 条件,但它们都不起作用,这意味着当按钮被单击太早时,图像在完成加载后不会添加到容器中。任何帮助不胜感激,提前感谢
可能最好的办法是使按钮不可用或禁用,直到加载完成。另一种选择可能是在加载未完成时提示请求。
像这样:
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);
}
这是安全违规行为。
您无法在没有用户交互的情况下实例化全屏模式。
激活全屏的唯一方法是直接从用户交互期间开始。IE:鼠标点击
这样看,任何黑客试图强迫用户全屏观看他们的广告并且没有出路,因为用户关闭了全屏,黑客可以重新打开它。
在没有用户交互的情况下,最接近全屏的方法是将 SWF 扩展到 HTML 文档的完整大小。
很抱歉打破了你的泡沫,我自己也试图解决这个问题。实际的用户点击事件必须在堆栈中,您才能全屏显示