SWFOBJECT CurrentFrame Javascript

时间:2011-06-25 23:54:26

标签: javascript swfobject

我正在挑战当前的框架。我使用的是swfobject ver 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 个答案:

答案 0 :(得分:1)

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

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

  2. 您尝试在swfobject.getObjectById之后立即使用swfobject.embedSWF。但是,这可能不起作用,因为在调用swfobject.getObjectById之前可能无法完成嵌入。 (顺便说一句,getObjectById仅用于静态发布;使用动态发布时,可以使用标准getElementById

  3. 您没有指定express install参数,因此您的SWFObject语法无效。请改用:

  4. 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
    }