Flash 如何从swfobject访问bgcolor?
Flashbuilder生成一个存储bgcolor的html(通过javascript):Flash 如何从swfobject访问bgcolor?,flash,actionscript-3,flash-cs5,Flash,Actionscript 3,Flash Cs5,Flashbuilder生成一个存储bgcolor的html(通过javascript): 。。。 var swfVersionStr=“10.0.0”; var xiswfullstr=“playerProductInstall.swf”; var flashvars={}; var params={}; params.quality=“高”; params.bgcolor=“#ff0000”; params.allowscriptaccess=“sameDomain”; params.all
。。。
var swfVersionStr=“10.0.0”;
var xiswfullstr=“playerProductInstall.swf”;
var flashvars={};
var params={};
params.quality=“高”;
params.bgcolor=“#ff0000”;
params.allowscriptaccess=“sameDomain”;
params.allowfullscreen=“true”;
...
如何在as3中动态更改该颜色?
如何访问此flashvar params.bgcolor
感谢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.stageHight
都返回0)因此,您可能希望在第一次调用上述图形代码之前等待一帧
这种方法比使用透明窗口模式和修改SWF后面的背景(HTML)要好得多,因为使用wmode=transparent
有时会导致奇怪的问题(例如某些浏览器中的键盘输入错误),并会显著降低性能
只有当您确实需要透明的wmode时,才可以使用透明的wmode,例如,当它后面有需要可见的HTML元素时。//as3
//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>
外部接口调用(“myFuction”,FF0000);
//javascript
var-myClr;
函数myFuction(myVal)
{
myClr=myVal;
window.action=actionFunc();
}
window.action=actionFunc();
函数actionFunc()
{
var flashvars={};
var params={};
var属性={};
params.bgcolor=myClr;
flashvars.mp3=“mast.mp3”;
var so=new swfobject.embeddeswf(“player_slim.swf”、“myContent”、“300”、“120”、“9.0.0”、true、flashvars、params、attributes);
所以,写(“myContent”);
}
这样试试。它起作用了。有什么意义?只需在Flash中绘制另一个背景。顺便说一句:bgcolor是一个参数,不是flashvar,所以我认为你不能直接访问它。当我调整浏览器窗口的大小时,它很重要。在某些情况下,我需要黑色背景,有时需要白色背景。画另一个背景并不能解决这个问题。你应该把它放在你的问题里@理查多尔森为你提供了部分答案。现在,您可以使用ExternalInterface让JavaScript告诉Flash使用他的技术绘制哪种颜色。或者,如果SWF嵌入的尺寸与浏览器窗口大小有关(例如,全浏览器,100%),那么您可以完全按照我在回答中的建议做,但添加一些逻辑以在Event.RESIZE事件处理程序中选择正确的颜色。
//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>