SWFOBJECT CurrentFrame Javascript

SWFOBJECT CurrentFrame Javascript

本文关键字:Javascript CurrentFrame SWFOBJECT      更新时间:2023-09-26

我在播放当前帧时遇到了一个挑战。我使用的是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 />

提前谢谢。

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

  1. 通过在属性对象中指定ID和名称,可以为新创建的<object>分配一个名称。这意味着swfobject.getObjectById("myAlternativeContent")无法工作,因为您已将<object>重命名为"flashDiv"。您应该使用swfobject.getObjectById("flashDiv")

  2. 您正试图在swfobject.embedSWF之后立即使用swfobject.getObjectById。然而,这可能不起作用,因为在调用swfobject.getObjectById之前可能无法完成嵌入。(BTW,getObjectById仅用于静态发布;使用动态发布时,可以使用标准的getElementById

  3. 您没有指定express install参数,因此SWFObject语法无效。使用这个替代:

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

#1和#2的解决方案是使用SWFObject的callback功能。这有助于定时,确保在嵌入成功之前不会调用DOM函数。它还提供了对嵌入式<object>的引用,使您能够避免调用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);
}

请记住,您可能仍然会遇到时间问题;一旦<object>嵌入到页面中,就会调用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
}