【问题标题】:SWFOBJECT CurrentFrame JavascriptSWFOBJECT CurrentFrame Javascript
【发布时间】:2011-09-22 19:12:22
【问题描述】:

我在播放当前帧时遇到了挑战。我正在使用 swfobject 2.2 版。

这是我的脚本:

 <script type="text/javascript">

        function flashplayer(flashname) {

            var flashvars = {};
            var params = {};
            params.play = "true";
            params.menu = "true";
            params.scale = "noscale";
            params.allowfullscreen = "true";
            var attributes = {
                id: "flashDiv",
                name: "flashDiv"
            };
            swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", flashvars, params, attributes);
            var obj = swfobject.getObjectById("myAlternativeContent");
            totalFrames = obj.totalFrames;
            $('#duration').html(totalFrames);
            currentFrame1 = obj.currentFrame;
            $('#current').html(currentFrame1);
            obj.addEventListener("onStateChange", "onytplayerStateChange");
        }
        function onStateChange() {
            var obj = swfobject.getObjectById("myAlternativeContent");
            currentFrame1 = obj.TcurrentFrame;
            $('#current').html(currentFrame1);
        }
        function stopflash() {
            var obj = swfobject.getObjectById("myAlternativeContent");
            obj.Stop();
        }
        function PlayFlash() {
            var obj = swfobject.getObjectById("myAlternativeContent");
            obj.Play();
        }
        function FlashRewind() {
            var obj = swfobject.getObjectById("myAlternativeContent");
            obj.Rewind();
        }
    </script>

   <div id="duration">
        1
    </div>
    <div id="current">
        1
    </div>
    <input onclick="flashplayer('../../Video/test.swf');" type="button" style="width: 300px"
        value="play flash" /><br />

提前致谢。

【问题讨论】:

    标签: javascript swfobject


    【解决方案1】:

    快速浏览一下,我发现您的代码存在三个问题。

    1. 通过在属性对象中指定 ID 和名称,您将名称分配给新创建的 &lt;object&gt;。这意味着swfobject.getObjectById("myAlternativeContent") 将不起作用,因为您已将&lt;object&gt; 重命名为“flashDiv”。你应该改用swfobject.getObjectById("flashDiv")

    2. 您试图在swfobject.embedSWF 之后立即使用swfobject.getObjectById。但是,这可能行不通,因为在调用 swfobject.getObjectById 之前可能无法完成嵌入。 (顺便说一句,getObjectById只需要静态发布;使用动态发布时,使用标准的getElementById就可以了)

    3. 您没有指定快速安装参数,因此您的 SWFObject 语法无效。改用这个:

    .

    swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", false, flashvars, params, attributes);
    

    .

    #1 和#2 的解决方案是使用 SWFObject 的 callback 功能。通过确保在嵌入成功之前不会调用 DOM 函数,这有助于计时。它还提供了对嵌入式&lt;object&gt; 的引用,使您能够避免调用swfobject.getObjectById

    function flashplayer(flashname) {
    
        var flashvars = {};
        var params = {};
        params.play = "true";
        params.menu = "true";
        params.scale = "noscale";
        params.allowfullscreen = "true";
        var attributes = {
            id: "flashDiv",
            name: "flashDiv"
        };
        function mycallback(event){
            var obj = event.ref;
            totalFrames = obj.totalFrames;
            $('#duration').html(totalFrames);
            currentFrame1 = obj.currentFrame;
            $('#current').html(currentFrame1);
            obj.addEventListener("onStateChange", "onytplayerStateChange");
        }
        swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", false, flashvars, params, attributes, mycallback);
    }
    

    请记住,您可能仍会遇到时间问题;当&lt;object&gt; 嵌入页面时,SWFObject 的回调就会被调用——这并不意味着 SWF 已经完成加载。

    您可以通过检查 Flash Player 的 PercentLoaded 方法和 JavaScript setInterval 来检查 SWF 的加载状态。

    var obj = event.ref;
    if(obj.PercentLoaded() === 100){
        //do stuff
    } else {
        //Use setInterval to check PercentLoaded again
    }
    

    【讨论】:

    • 非常感谢,但是当我使用 var obj = event.ref;我收到此错误(Microsoft JScript 运行时错误:无法获取属性“totalFrames”的值:对象为空或未定义)。我将其更改为: var obj = swfobject.getObjectById("flashDiv");我得到了总帧数,但仍然没有当前正在播放的帧数。
    • 那是由于我在帖子末尾提到的时间问题;如果 SWF 尚未完成加载,则无法查询 TotalFrames。将查询包装在检查 PercentLoaded 的条件语句中。另外,我相信 TotalFrames 以大写 T 开头并且区分大小写。 obj.TotalFrames() 见adobe.com/support/flash/publishexport/scriptingwithflash/…
    • 谢谢,您的建议很有效;但是仍然无法获取当前帧号; TotalFrames 在 FireFox 或 Chrome 中也不起作用。我找到了这个帖子并且它有效。再次感谢您的帮助。
    • 谢谢,您的建议很有效;但是仍然无法获取当前帧号; TotalFrames 在 FireFox 或 Chrome 中也不起作用。我找到了这个帖子并且它有效。再次感谢您的帮助。
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多