【问题标题】:How to access bgcolor from swfobject?如何从 swfobject 访问 bgcolor?
【发布时间】:2011-08-23 13:34:08
【问题描述】:

Flashbuilder 生成一个存储 bgcolor 的 html(通过 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 ?

谢谢

【问题讨论】:

  • 有什么意义?只需在 Flash 中绘制另一个背景。顺便说一句:bgcolor 是一个参数,而不是 flashvar,所以我认为您不能直接访问它。
  • 调整浏览器窗口大小时很重要。在某些情况下,我需要黑色,有时需要白色背景。绘制另一个背景并不能解决这个问题。
  • 你应该把它放在你的问题中。 @richarddolsson 为您提供了部分答案。现在您可以使用 ExternalInterface 让 JavaScript 告诉 Flash 使用他的技术绘制哪种颜色。
  • 或者,如果 SWF 嵌入的尺寸与浏览器窗口大小相关(例如,全浏览器,100%),那么您可以完全按照我在回答中的建议进行操作,但添加一些逻辑在 Event.RESIZE 事件处理程序中选择正确的颜色。

标签: flash actionscript-3 flash-cs5


【解决方案1】:

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.stageWidthstage.stageHeight 都返回 0)所以在第一次调用上述绘图代码之前,您可能需要等待一帧。

此方法比使用透明窗口模式和修改 SWF(HTML)背后的背景要好得多,因为使用 wmode=transparent 有时会导致奇怪的问题(例如,某些浏览器中的键盘输入错误)并且通常会显着降低性能。

仅当您确实需要透明 wmode 时才使用透明 wmode,例如当它后面有需要可见的 HTML 元素时。

【讨论】:

    【解决方案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>
    

    试试这个方法。它的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2012-06-11
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      相关资源
      最近更新 更多