SWFOBJECT CurrentFrame Javascript - PullRequest
       1

SWFOBJECT CurrentFrame Javascript

0 голосов
/ 26 июня 2011

У меня проблема с воспроизведением текущего кадра. Я использую 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 Ответ

1 голос
/ 26 июня 2011

На первый взгляд, я вижу три проблемы с вашим кодом.

  1. Указывая идентификатор и имя в вашем объекте атрибутов, вы присваиваете имя только что созданному <object>. Это означает, что swfobject.getObjectById("myAlternativeContent") не будет работать, потому что вы переименовали <object> в "flashDiv". Вы должны использовать swfobject.getObjectById("flashDiv") вместо.

  2. Вы пытаетесь использовать swfobject.getObjectById сразу после swfobject.embedSWF. Однако это, вероятно, не сработает, потому что встраивание может быть не завершено до вызова swfobject.getObjectById. (Кстати, getObjectById требуется только для статической публикации; при использовании динамической публикации можно использовать стандарт getElementById)

  3. Вы не указываете параметр экспресс-установки, поэтому ваш синтаксис SWFObject недействителен. Используйте это вместо:

.

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

.

Решением для № 1 и № 2 является использование функции callback SWFObject. Это помогает с синхронизацией, гарантируя, что вы не будете вызывать ваши функции 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);
}

Имейте в виду, что вы все еще можете столкнуться с проблемами времени; Обратный вызов SWFObject вызывается, как только на страницу встраивается <object> - это не означает, что SWF завершил загрузку.

Вы можете проверить состояние загрузки SWF-файла, проверив метод Flash Player PercentLoaded в сочетании с JavaScript setInterval.

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