我有几个想法,从使用ExternalInterface从javascript调用actionscript函数,到传递FlashVars到swf以让swf知道div的大小,再到一个更简单的想法。
以下是我的想法。
将1个MovieClip作为背景,1个MoveClip包含头部。
我认为你最好选择你的示例中的“这是顶部的flash电影”选项。最好设置:
stage.scaleMode = StageScaleMode.NO_SCALE
或者
stage.scaleMode = StageScaleMode.SHOW_ALL
这个想法是让内容按比例缩放。
然后,您需要添加一个事件监听器来监听调整大小的事件,并缩放/重绘背景。
stage.addEventListener(Event.RESIZE, stageResizeHandler);
function stageResizeHandler(event:Event = null):void{
//assuming your background is called "background"
background.width = stage.stageWidth;
background.height = stage.stageHeight;
//if content needs recentering, assuming "content" is the name used
content.x = (stage.stageWidth - content.width) * .5;
content.y = (stage.stageHeight - content.height * .5;
}
我已经为事件处理程序参数设置了一个默认值,因此您可以在不触发事件的情况下调用该函数。
例如:
stageResizeHandler();
替代
stage.dispatchEvent(new Event(Event.RESIZE));
你可能需要在初始化时调用该函数,不确定。
另外,您需要根据舞台的大小按比例调整内容的大小。以下是我测试过的一些代码:
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(Event.RESIZE, stageResizeHandler);
stageResizeHandler();
function stageResizeHandler(event:Event = null):void{
bg.width = stage.stageWidth;
bg.height = stage.stageHeight;
if(content.width > stage.stageWidth || content.height > stage.stageHeight){
var ratio:Number = getRatio(content);
if(stage.stageWidth > stage.stageHeight){
content.height = stage.stageHeight;
content.width = content.height * ratio;
}else
if(stage.stageWidth < stage.stageHeight){
content.width = stage.stageWidth;
content.height = content.width / ratio;
}
}else {
content.scaleX = content.scaleY = 1;
}
content.x = (stage.stageWidth - content.width) * .5;
content.y = (stage.stageHeight - content.height) * .5;
}
function getRatio(target:MovieClip):Number{
var ratio:Number;
target.width > target.height ? ratio = (target.width / target.height) : ratio = (target.height / target.width);
return ratio;
}
很不幸,我注意到在某些尺寸下会出现闪烁。我猜测这是由于缩放和比例变化频繁导致的。