我有几个想法,从使用 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{
//resize bg
bg.width = stage.stageWidth;
bg.height = stage.stageHeight;
//scale proportionally
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;
}
//centre
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;
}
不幸的是,我注意到某些尺寸有一些闪烁。我猜测缩放比例和比率的变化经常取决于您调整大小的方式。