首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWFOBJECT对象CurrentFrame Javascript

SWFOBJECT对象CurrentFrame Javascript
EN

Stack Overflow用户
提问于 2011-06-26 07:54:26
回答 1查看 4.3K关注 0票数 0

我有一个挑战,让当前的帧播放。我使用的是swfobject 2.2版。

下面是我的脚本:

代码语言:javascript
复制
 <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 />

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-26 09:50:27

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

  1. 通过在attributes对象中指定ID和名称,可以为新创建的<object>指定一个名称。这意味着swfobject.getObjectById("myAlternativeContent")将不起作用,因为您已经将<object>重命名为"flashDiv“。您应该在尝试使用instead.
  2. You're之后立即使用swfobject.getObjectById("flashDiv") swfobject.getObjectById。然而,这可能不会起作用,因为在调用swfobject.getObjectById之前,嵌入可能不会完成。(顺便说一句,getObjectById只用于静态发布;当使用动态发布时,可以使用标准的getElementById)
  3. You're而不指定快速安装参数,因此您的SWFObject语法是无效的。改用这个:

代码语言:javascript
复制
swfobject.embedSWF(flashname, "myAlternativeContent", "800", "600", "9.0.0", false, flashvars, params, attributes);

#1和#2的一个解决方案是使用SWFObject的callback特性。这有助于计时,因为它确保在嵌入成功之前不会调用DOM函数。它还提供了对嵌入式<object>的引用,使您可以避免进行swfobject.getObjectById调用。

代码语言: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"
    };
    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的加载状态。

代码语言:javascript
复制
var obj = event.ref;
if(obj.PercentLoaded() === 100){
    //do stuff
} else {
    //Use setInterval to check PercentLoaded again
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6481242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档