代码之家  ›  专栏  ›  技术社区  ›  zzzzBov

有没有办法检查ActionScript中循环参数的值?

  •  0
  • zzzzBov  · 技术社区  · 14 年前

    有许多参数可以添加到 object embed 嵌入flash视频的标签。大部分都列出来了 here . 其中一些可以通过ActionScript以编程方式访问/更改(例如。 <param name="scale"> 可通过 stage.scaleMode ).

    是否可以为 loop 是否访问/更改参数?

    编辑以添加: 我知道flashvars,这不是我要问的。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Orbling    14 年前

    一般的网络共识是不,你不能从Flash内部访问flashvars/movie以外的参数。

    但是,至少在某些浏览器中,您可以从JavaScript访问参数,当然,您还可以使用外部接口在Flash和JavaScript之间进行交互。

    可能是一个javascript例程,大致如下:

    function getParam(paramName) {
        return $('#flashid param[name=' + paramName + ']').val();
    }
    

    以及Flash中的方法:

    import flash.external.ExternalInterface;
    
    function getParam(paramName:String):String {
        return String(ExternalInterface.call("getParam", paramName));
    }
    

    显然,要确保在SWF和object/embed上启用脚本访问。

        2
  •  1
  •   zzzzBov    14 年前

    “能为 loop 要访问/更改参数(通过ActionScript)?”
    简短回答: 不用麻烦了。

    长答案:

    @Orbling的答案依赖于通过JavaScript进行检查,理论上,如果在添加嵌入式flash视频时添加或删除了参数,那么JavaScript可能处于不一致的状态。

    我想出了一个间接的方法来检查是否设置了播放或循环参数。只有当根视频中有两个或更多帧时,才能检测参数。

    第一帧

    if (temp.loadParams.playParam)
    {
      temp.loadParams.loopParam = true;
      //uses external interface to log to the console (essentially the same as trace)
      temp.say('temp: looped');
      stop();
    }
    

    第二帧

    if (!temp.loadParams.playParam)
    {
      temp.loadParams.playParam = true;
      temp.say('temp: played');
    }
    

    temp 是文档类名,loadParams只是存储参数状态的静态对象。如果 play 参数为真时,视频将转到第2帧,这将设置 playParam 价值。如果 param为true,则视频将返回到第1帧,该帧设置 loopParam 价值。

    如果 是假的, 仍然可以通过 Event.ENTER_FRAME 但在这一点上,继续检查可以被 play(); stop(); 在第一帧或最后一帧。