Flashbuilder生成一个html,其中存储了bgcolor(通过javascript):
...
var swfVersionStr = "10.0.0";
<!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
var xiSwfUrlStr = "playerProductInstall.swf";
var flashvars = {};
var params = {};
params.quality = "high";
params.bgcolor = "#ff0000";
params.allowscriptaccess = "sameDomain";
params.allowfullscreen = "true";
...
如何在as3中动态更改bgcolor? 我如何访问这个flashvar params.bgcolor?
由于
答案 0 :(得分:3)
SWF文件中嵌入了背景颜色属性(如帧速率,默认尺寸等),但嵌入环境(通常为HTML)可以在嵌入时覆盖所有这些设置。此外,其中一些可以在运行时被ActionScript覆盖。但是,SWF背景颜色不属于最后一类。
相反,您可以使用图形API在所有内容后面绘制一个矩形,例如通过执行以下操作:
root.graphics.beginFill(0xffcc00); // Replace with your color
root.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
如果存在SWF调整大小的风险,您应该将上述两行放在事件处理程序中,并将其作为监听器添加到Event.RESIZE的舞台上,如下所示:
function handleStageResize(ev : Event) : void
{
root.graphics.clear();
root.graphics.beginFill(0xffcc00); // Replace with your color
root.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
}
// Add the listener
stage.addEventListener(Event.RESIZE, handleStageResize);
还要注意某些旧浏览器存在一些问题,在正确设置阶段维度之前,将调用ActionScript的主要入口点(意味着stage.stageWidth
和stage.stageHeight
返回0)所以你可能想在第一次调用上面的绘图代码之前等待一帧。
这种方法比使用透明窗口模式和修改SWF后面的背景(用HTML格式)要好得多,因为使用wmode=transparent
有时会导致奇怪的问题(例如某些键盘输入错误)浏览器)并且通常会显着降低性能。
如果您真的需要透明的wmode,那么只能使用透明的wmode,例如当它背后有HTML元素需要可见时。
答案 1 :(得分:2)
//as3
externalInterface.call("myFuction", "#FF0000");
//javascript
var myClr;
function myFuction(myVal)
{
myClr = myVal;
window.action = actionFunc();
}
window.action = actionFunc();
function actionFunc()
{
var flashvars = {};
var params = {};
var attributes = {};
params.bgcolor = myClr;
flashvars.mp3="mast.mp3";
var so = new swfobject.embedSWF("player_slim.swf", "myContent", "300", "120", "9.0.0",true, flashvars, params, attributes);
so.write("myContent");
}
<div id="myContent">
</div>
试试这种方式。它的工作。