0

我有一个 Javascript 插件,在这个插件中有很多功能。我想要的是$.Repro.barraSonido从 ActionScript 3 代码中调用该函数。插件是这样的:

(function ($) {
    $.fn.Repro = function () {
        var parametros = {
            ejecucion: false,
            lista: null,
            audio: 0
        };
        var tposic = true;
        $.Repro = function (opciones) {
            $.ropc = $.extend({}, parametros, opciones);

            var Metodos = {
                Iniciar: function () {
                    $('#opc_player').attr('unselectable', 'on').css('user-select', 'none').on('selectstart', false);
                    $.Repro.barra();
                    $.Repro.volumen();
                    $.Repro.movPlaylist();
                    $('#btn_play').on('click', $.Repro.musc_play);
                }
            };
            return Metodos;
        };
        $.Repro.musc_play = function () {
            if (!swf('jrepro').ispausa()) $(this).removeClass('play').addClass('parar');
            else $(this).removeClass('parar').addClass('play');
            swf('jrepro').pausa();
            return false;
        };
        $.Repro.autoplay = function () {
            var e = $('.lista_musica').find('.selecc');
            if (e.length == 0) return '';
                $.ropc.lista = e.parent();
                $('#T-tema').text(e.find('.artista').html());
                $('#T-artista').text(e.find('.tema').html());
                return new Array(s['s' + e.attr('name')], e.attr('aud'));
            }
        };
        $.Repro.play = function (c) {
            if ($.ropc.lista) {
                var el = $.ropc.lista.find("li");
                if (c != undefined) {
                    $.ropc.audio = c;
                } else if ($('#btn_aleatorio').hasClass('aleatorioS') && el.length > 1) {
                    var sg = true;
                    while (sg) {
                        var rnd = Math.floor(Math.random() * el.length);
                        if (rnd != $.ropc.audio) sg = false;
                    }
                    $.ropc.audio = rnd;
                } else if ($('#btn_repetir').hasClass('repetirS')) {
                    $.ropc.audio = $.ropc.audio;
                } else $.ropc.audio = $.ropc.audio >= (el.length - 1) ? 0 : ($.ropc.audio + 1);
                var eil = el.eq($.ropc.audio);
                el.removeClass('selecc');
                eil.addClass('selecc');
                $('#T-tema').text(eil.find('.tema').html());
                $('#T-artista').text(eil.find('.artista').html());
                swf('jrepro').r(s['s' + eil.attr('name')], eil.attr('aud'));
                if (swf('jrepro').ispausa()) $('#btn_play').removeClass('play').addClass('parar');
                else $('#btn_play').removeClass('parar').addClass('play');
            }
        };
        $.Repro.barraSonido = function (n, total, n2, total2) {
            $.Repro.cargaSonido(n2, total2);
            if (n <= total) {
                var i_tiempo = (n / 1000);
                var m = Math.floor(i_tiempo / 60),
                    s = Math.ceil(i_tiempo % 60);
                $("#tinicial").html((m > 9 ? m : 0 + '' + m) + ':' + (s > 9 ? s : 0 + '' + s));
                var t_total = (total / 1000),
                    fm = Math.floor(t_total / 60),
                    fs = Math.ceil(t_total % 60);
                $("#tfinal").html((fm > 9 ? fm : 0 + '' + fm) + ':' + (fs > 9 ? fs : 0 + '' + fs));
                if (total > 0 && tposic) {
                    var pos = Math.round((Math.round(n) * $('#precarga').width()) / (total));
                    $('.bar_pr').css('width', pos + 'px');
                    $('#player_puntero').css('left', pos + 'px');
                }
            }
        };
        $.Repro.cargaSonido = function (n, total) {
            if (total > 0 && $('#precarga').width() < 290) {
                var posCarg = Math.round((n * 290) / total);
                $('#precarga').css({width: posCarg}, 500);
            }
        };
        $.Repro.barra = function () {
            $('.bar_fon').slider({
                    max: 100,
                    range: "min",
                    slide: function (a, c) {
                        tposic = false;
                        $('.bar_pr').css('width', c.value + '%');
                    },
                    stop: function (a, c) {
                        swf('jrepro').tie(parseInt($('#player_puntero').css('left')), $('#precarga').width());
                        tposic = true;
                    }
                });
        };
        $.Repro.movPlaylist = function () {};
        return $.Repro;
    }();
})(jQuery);

它不起作用,我将以下内容放入 SWF 文件中:

import flash.external.ExternalInterface;

function call_javascript(evt:MouseEvent):void {
    ExternalInterface.call("$.Reproductor.barraSonido");//Even with "()"
}

js_btn.addEventListener(MouseEvent.MOUSE_UP, call_javascript);

出于测试目的,在函数$.Reproductor.barraSonido中,我添加了alert("hola");.

HTML 文件是:

<script type="text/javascript">
     //Here is the plugin
</script>

<object width="300" height="150">
<param name="movie" value="player.swf">
<embed src="player.swf" width="300" height="150">
</embed>
</object>
4

1 回答 1

0

您可以使用 AS3 的External Interface类与 Javascript 进行通信(往返)。您可以在此处阅读更多信息External Interface

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html

根据您的需要,例如:

if(ExternalInterface.available) ExternalInterface.call('$.Repro. barraSonido', ...arguments);

将调用该函数。您需要将...arguments上面示例中的参数替换为您想要传递给barraSonido函数的参数。

于 2013-07-08T21:51:44.700 回答